Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1294918pxk; Mon, 31 Aug 2020 15:32:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzia+nBdDtfYfZ6eThqEvJgzGKQ7vZmAAnR1jpcBGYeotz8+uUEWCvQrchE2h0XPF3dA1Sd X-Received: by 2002:aa7:d284:: with SMTP id w4mr3236066edq.258.1598913150204; Mon, 31 Aug 2020 15:32:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598913150; cv=none; d=google.com; s=arc-20160816; b=ygtWXeF0yPfsXyP3K28cN6tJbq7nB82Uj4xHvV3QLq/ARJeFuR0bAMrK9cR6V9cO30 v4FDl+oOBIB7s9o4Rzq3330yqcK4xsbYUUW4jwqdu+fIPa6TmIA8fNj6AglVPdY+1Lrj 02Wt85zk+RNxwoQx9EB5f1AgLq+reQATAiLwluBBaef29yf4xHc92U32pEJ38T2Y+Ps0 3orbvXhU2dQuLBUqxoBVQoXwBdrbT+Dq9Ddb0GbbZYMvrZEhVNtKkhmvq5mOSK/g2JlU ycFYCg2LPh6mXTQdD6p1/Hd7rup32Rtj7onSRHkyp5T4UUpXZTP+s8h47kdi/T6JMqHh apOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=yvSc+zMhUiUFJwUhVMRNSqROrUJ6aW9EH2eUaXNq7Ys=; b=t6dCxR97Bl9bWsNDeriaTeyW0AF8/L3YDHvxbUPhfLu25Vo1zA97hg27dwo1vPJL7H XehO5PhiTBQTMtSVgbJXRYvFADOblfU8InKWEKySjJF1qgrBnEpkjEIlPqDlt2rZ/tBF 77Mhnr5JNd6/k5Ky74RlkiTrHp4CdDjXbUcYbd1QtX+s+NVnePDUbooUeArzyHmVSsQl 4tNWyC0pLn/kvXAaMWBg4ixTnbS56rEMN9txqaDJPOvP/AX9QMLDGAb5BOh+mVamibJk igERAGFLXcYoqOXwQmo2JVYZj207DD/3/x59Wr1WcIw8WHhydgsALX7EMt/J7WQxrdv7 qZnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=krx4K0jk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id en9si2220403ejb.220.2020.08.31.15.32.07; Mon, 31 Aug 2020 15:32:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=krx4K0jk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729658AbgHaSSd (ORCPT + 99 others); Mon, 31 Aug 2020 14:18:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:51734 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729420AbgHaSSI (ORCPT ); Mon, 31 Aug 2020 14:18:08 -0400 Received: from paulmck-ThinkPad-P72.home (unknown [50.45.173.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A0E621548; Mon, 31 Aug 2020 18:18:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598897887; bh=JZzcvhBHgf45+Cg48Gn+T3E4XDtu40+IMTpazm85zU0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=krx4K0jklm6lfWNIs1x3SDbjNpM9qroeDdR9DPXTUVPwMZHSF3H+mqlWPQAGKT1o8 Z7tCajikUAmcZRF3aJoGzbLabkSdmvEZT++RwfdfEDY5AQ6HVT286XOUz+ASFzDA5g uVJsf1kyenmfIIukIrUiUWpvUZD8PPJ6Zm/S0BdM= From: paulmck@kernel.org To: linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, kernel-team@fb.com, mingo@kernel.org Cc: elver@google.com, andreyknvl@google.com, glider@google.com, dvyukov@google.com, cai@lca.pw, boqun.feng@gmail.com, "Paul E . McKenney" Subject: [PATCH kcsan 09/19] instrumented.h: Introduce read-write instrumentation hooks Date: Mon, 31 Aug 2020 11:17:55 -0700 Message-Id: <20200831181805.1833-9-paulmck@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200831181715.GA1530@paulmck-ThinkPad-P72> References: <20200831181715.GA1530@paulmck-ThinkPad-P72> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marco Elver Introduce read-write instrumentation hooks, to more precisely denote an operation's behaviour. KCSAN is able to distinguish compound instrumentation, and with the new instrumentation we then benefit from improved reporting. More importantly, read-write compound operations should not implicitly be treated as atomic, if they aren't actually atomic. Acked-by: Peter Zijlstra (Intel) Signed-off-by: Marco Elver Signed-off-by: Paul E. McKenney --- include/linux/instrumented.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h index 43e6ea5..42faebb 100644 --- a/include/linux/instrumented.h +++ b/include/linux/instrumented.h @@ -43,6 +43,21 @@ static __always_inline void instrument_write(const volatile void *v, size_t size } /** + * instrument_read_write - instrument regular read-write access + * + * Instrument a regular write access. The instrumentation should be inserted + * before the actual write happens. + * + * @ptr address of access + * @size size of access + */ +static __always_inline void instrument_read_write(const volatile void *v, size_t size) +{ + kasan_check_write(v, size); + kcsan_check_read_write(v, size); +} + +/** * instrument_atomic_read - instrument atomic read access * * Instrument an atomic read access. The instrumentation should be inserted @@ -73,6 +88,21 @@ static __always_inline void instrument_atomic_write(const volatile void *v, size } /** + * instrument_atomic_read_write - instrument atomic read-write access + * + * Instrument an atomic read-write access. The instrumentation should be + * inserted before the actual write happens. + * + * @ptr address of access + * @size size of access + */ +static __always_inline void instrument_atomic_read_write(const volatile void *v, size_t size) +{ + kasan_check_write(v, size); + kcsan_check_atomic_read_write(v, size); +} + +/** * instrument_copy_to_user - instrument reads of copy_to_user * * Instrument reads from kernel memory, that are due to copy_to_user (and -- 2.9.5