Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1948180ybh; Fri, 24 Jul 2020 00:02:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyYS0ekjJmJX8X/40Jtf9vCVRYkm8Ra4HRwGd6lL603oO4z8FGbYFdVSF/ge8EZAH1tgwPM X-Received: by 2002:a17:906:b787:: with SMTP id dt7mr7366922ejb.320.1595574135545; Fri, 24 Jul 2020 00:02:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595574135; cv=none; d=google.com; s=arc-20160816; b=qXn6bMDTFASsssWlfMQ4VxpwXcddoCtAoB2aSnhPrA4QVu8VvCcBVukqg/IQWOAF2L suB6uH18CJ3eqHDouNiv1bjZF1n961nrQM93LMxfES8QLJiIqdj9FfCtALbb3hDXty89 4pQauaoWegDlgqLJH0dn+uuGevQtGsAtw/d9AeAIYjTLrqx9RZ70s2bIoRu5DIL3OIoy gPStbR9D50HAFcx/MqsQO83fg1a9VNkumxnEMaUzQyKap1oxecPeMO+dcxzo7zoY+2lE QB1X5K0ALPV54oHpp31zv01n4IlwxTtdyo5k3u4DHZRiOTfgeQFujY2Oxy2J8t2GuwPb PGQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=nzPB/8gD7tiXvmPnGkXWvRfHEEqZYmZWnzjoz4lCFa4=; b=EewrfHIH5ty8PZaKKfZBscBj2NqJo75hbPNUpW90VQvm7Aq7GPqKTnNcdzxxaN6j6P 7ZcPQezV6JLWqUeeUGz1zLEEFWXq07jByzD9wMAkNKqJ4DjE/08M1BLNuqT8EQ2+Zz0Y TIXvzqAUN8BWSg5xfI+6xzHJkWB0DcKxGpPkqRJEoM0RxqSTzi4O0owCH0TbrLGSoOjJ fG+gON4ilkLkHCNz8Is1jGJBuKV3/NUQr3crsHsumO5SjRcpzqK1P/bDGZAMQ6qPfNlv muZXEKDPXIlINmApW1l1MJX8XUjiehlnVVAOjeQ1eCjn2yZPeQLiO6mTDDMbnzBq8Oh8 6GtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=URAz3B9p; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i25si52579ejf.697.2020.07.24.00.01.53; Fri, 24 Jul 2020 00:02:15 -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=@google.com header.s=20161025 header.b=URAz3B9p; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727019AbgGXHAl (ORCPT + 99 others); Fri, 24 Jul 2020 03:00:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33510 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726861AbgGXHAi (ORCPT ); Fri, 24 Jul 2020 03:00:38 -0400 Received: from mail-wm1-x34a.google.com (mail-wm1-x34a.google.com [IPv6:2a00:1450:4864:20::34a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2EB57C0619E5 for ; Fri, 24 Jul 2020 00:00:38 -0700 (PDT) Received: by mail-wm1-x34a.google.com with SMTP id y204so3620151wmd.2 for ; Fri, 24 Jul 2020 00:00:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=nzPB/8gD7tiXvmPnGkXWvRfHEEqZYmZWnzjoz4lCFa4=; b=URAz3B9pmI3bMj/6AQUMnQQhW0rplCGsl7EloPnKMvSTNGhtNnCDfpGQ/8+TWhN/lS eu93QjVcDkQhVrqUknfjSvB0XOajZEZToOyVflz40sULKVkXx6GdG2Jl9RetHholLscb PoV5V60V4M9lw/Srge2zKAj1zk8uQFxfbooBj805sbbIK/sv+2won75T8Ek6ZGQN9uEK 4+p+bDebrCVEHu50+mjp7zz0MS0fpWFGfLHruk2rEJmQEiqiXAcTlPldK0MredKRg7Tu hIeWfrLaMilSJpOi81uGZWmzYRa14TOKhpPwhFvIXdYF90TU+Nm8AI28zeAGN4zl+ncI mmoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=nzPB/8gD7tiXvmPnGkXWvRfHEEqZYmZWnzjoz4lCFa4=; b=DPdnI6hfocQ613QiKJWG1iGnz8pDvvgiqsYSybAIEcmYsvgHjuKFiYA4Ph5qKdbKCg 4tpf/1F0GV3HP+83Ez0oDxfV22jRops1ggKKfvrosf51umCyRMxWcPdJ0ZXVIsvOIcFi WWynvVaG01brC7W9gLNzu8hC3f8a9pPYIRtTzChCqKHOleLd2evDBij7orwXVt3aQJS/ VTIJVMnwhoZ+4U9Ha8ZTnNZghO9tBV8EnpM/7RiqF0+53Dh1eI/ZdPntIIRM8z0Q8NLq U5GbKURa3+TAPN7nNWR4KhdhilgUzElB5hjQeQKxT4Ug21yxxRj4zGekLGw4ArqVIjVP OOFw== X-Gm-Message-State: AOAM530MblObt+YXH6rqVytauFIvIFPhwygAxFP9JqD6cwFYgKBR7cFm KAKjUUyYGbTqBGTAhqCyP/XqU8bchQ== X-Received: by 2002:adf:e805:: with SMTP id o5mr7608214wrm.419.1595574036687; Fri, 24 Jul 2020 00:00:36 -0700 (PDT) Date: Fri, 24 Jul 2020 09:00:06 +0200 In-Reply-To: <20200724070008.1389205-1-elver@google.com> Message-Id: <20200724070008.1389205-7-elver@google.com> Mime-Version: 1.0 References: <20200724070008.1389205-1-elver@google.com> X-Mailer: git-send-email 2.28.0.rc0.142.g3c755180ce-goog Subject: [PATCH v2 6/8] instrumented.h: Introduce read-write instrumentation hooks From: Marco Elver To: elver@google.com, paulmck@kernel.org Cc: will@kernel.org, peterz@infradead.org, arnd@arndb.de, mark.rutland@arm.com, dvyukov@google.com, glider@google.com, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Signed-off-by: Marco Elver --- include/linux/instrumented.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h index 43e6ea591975..42faebbaa202 100644 --- a/include/linux/instrumented.h +++ b/include/linux/instrumented.h @@ -42,6 +42,21 @@ static __always_inline void instrument_write(const volatile void *v, size_t size kcsan_check_write(v, 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 * @@ -72,6 +87,21 @@ static __always_inline void instrument_atomic_write(const volatile void *v, size kcsan_check_atomic_write(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 * -- 2.28.0.rc0.142.g3c755180ce-goog