Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp1947210ybh; Fri, 24 Jul 2020 00:00:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyKiBR3IifJctYqzUQyji3VAlGiUtgj1W0BdheZ0wKgUjlL35FqwI1fqdDt/iBs38fzkofz X-Received: by 2002:aa7:d04e:: with SMTP id n14mr7912344edo.161.1595574057208; Fri, 24 Jul 2020 00:00:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595574057; cv=none; d=google.com; s=arc-20160816; b=MFmbqUae79CL+Fyadh2t3t4FD5LVQ5aojeOWY4m96ckR9CiNGKnTbv1IVGh989chk2 OtoN++S5z0s1GaSmSLrhF5YhWZpm4Z2cJqgsa0PQhLwr4LkIp3x8Jcqbbi1lSMQ/LJ0v 5sksc39oxp1N94QhYcdcuarycTFK2HugAsTSNHbRCfOtkD2PmwBtXPv3i0L5qvz9Pght rriI7a3ghQUHHZhwOKtu4BjLEQzRxmO6peGr9iFrXFYNj5YwhlwtKd11NEahsBmI2LHp T9gyEyqlPMJ7Iafz6mZdpOdnt45qF2Bs63xIGW0E7D/0zvACMMiZn6BkwuUAQBO9MoZk uklg== 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:mime-version :message-id:date:dkim-signature; bh=nYhmgKcIIGxCsAi7Og+Yd3I+h1LrKRUSXiXnS3u5PnU=; b=pRfbiNX9r326344BXrdur+aUHcy+ote8VbM5yrHNwAQyxAQkBYHuVIXd4JA407Y/p3 Lb6f5oQb23Zj2/QJLeCcPgIUoihZ21p3Nlamw3KpkPSTILmqy9j9AoRI+RKAdVUXyTi6 bMxpgcwms/RMplWpYJd2b6AqW4PpRnR1wfcw8fwskFfPZ8/FykHAoZKs8RZf/EjerlbK 0Nmmk4749UpMVPxTHf614cUBk+NztlHUxzhV333DwCDnDbS9bYpWwj0JlTyZMVbtxmbw eQX5oKvuJ3a5nh0pxGZC9yWODKjvQ5lXj/+jRdAzWbFRF0Ymiwfbp3M2SLstjsAZKLAV jBMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=VmnqZ2EA; 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 g13si76682ejd.152.2020.07.24.00.00.34; Fri, 24 Jul 2020 00:00:57 -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=VmnqZ2EA; 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 S1726726AbgGXHAY (ORCPT + 99 others); Fri, 24 Jul 2020 03:00:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725942AbgGXHAX (ORCPT ); Fri, 24 Jul 2020 03:00:23 -0400 Received: from mail-wr1-x44a.google.com (mail-wr1-x44a.google.com [IPv6:2a00:1450:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 732ECC0619D3 for ; Fri, 24 Jul 2020 00:00:23 -0700 (PDT) Received: by mail-wr1-x44a.google.com with SMTP id f14so1857125wrm.22 for ; Fri, 24 Jul 2020 00:00:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=nYhmgKcIIGxCsAi7Og+Yd3I+h1LrKRUSXiXnS3u5PnU=; b=VmnqZ2EAprygZLrhVFCDi1Q7n6PIAKLoT1x9Cs7iRuMS9jOciQw4aEchwk0UUJj/gw y57PDiIC8p+PXhimWgNMj9P6oIq9m3Zy7zJUxtFTEhP3eNPohY76S0hioVUMfGuGIlCO ywRo1uwLVvKZjpg14Khds/2WCEasTQy/V71ZaxJcybYQQeTglIFrfgeGdJawJTshRfMA lAKfjy7kNTAneGiNTkiyKuKrajor9Fc0cqJl+JXvUfmShF4AjflzwPA7/HqygLYj/Osc ro6YVGAxUZzX2cIlgbfc7vclHWfJCIRel0mSHx9ttd8IAWj6QMQNof8cxr1i2zKwPjMx 92Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=nYhmgKcIIGxCsAi7Og+Yd3I+h1LrKRUSXiXnS3u5PnU=; b=mA2EKTq6EzHmGSv8zDOVF/ywg2dhm7lJcrD4KU1UuEqeDIZEkHGcD0J+5AXIRDaw/C zL6YoI5VOwsEl/nEDs2qXBBpE/dN2DLoe2+Pz10kcHBlDP1yOi/JXi6jnBbmcu7mr+Ku iNxUWEOAO/otHHKd0kHZ0p3MKj/xtxFciOMyHECzpASn9v2MfxCxF8xUMX1TOj0y4zxL AcmbOhI2p07kil1NwPjlT4iPHbBShwx0gby7dHp+6Wkpet2PHcBKUTJ8zfEKyHjFpQhs j/Y+MIdwbDCrbv3wXFwiT1UdaIjeBfmAIj3xIofwyB2am+1IkXTVRzOghIjjqebnslhE MKOw== X-Gm-Message-State: AOAM531ODBW0DML11doV6gtxjfG2nZIer1a+fJsRYxco7JoaEPrOo8uA L8jrHhusizEcM59UeJ6mOHH0jxVuag== X-Received: by 2002:a7b:c4d3:: with SMTP id g19mr939521wmk.29.1595574022053; Fri, 24 Jul 2020 00:00:22 -0700 (PDT) Date: Fri, 24 Jul 2020 09:00:00 +0200 Message-Id: <20200724070008.1389205-1-elver@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.28.0.rc0.142.g3c755180ce-goog Subject: [PATCH v2 0/8] kcsan: Compound read-write instrumentation 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 This series adds support for enabling compounded read-write instrumentation, if supported by the compiler (Clang 12 will be the first compiler to support the feature). The new instrumentation is emitted for sets of memory accesses in the same basic block to the same address with at least one read appearing before a write. These typically result from compound operations such as ++, --, +=, -=, |=, &=, etc. but also equivalent forms such as "var = var + 1". We can then benefit from improved performance (fewer instrumentation calls) and better reporting for such accesses. In addition, existing explicit instrumentation via instrumented.h was updated to use explicit read-write instrumentation where appropriate, so we can also benefit from the better report generation. v2: * Fix CC_HAS_TSAN_COMPOUND_READ_BEFORE_WRITE: s/--param -tsan/--param tsan/ * Add some {} for readability. * Rewrite commit message of 'kcsan: Skew delay to be longer for certain access types'. * Update comment for gen-atomic-instrumented.sh. Marco Elver (8): kcsan: Support compounded read-write instrumentation objtool, kcsan: Add __tsan_read_write to uaccess whitelist kcsan: Skew delay to be longer for certain access types kcsan: Add missing CONFIG_KCSAN_IGNORE_ATOMICS checks kcsan: Test support for compound instrumentation instrumented.h: Introduce read-write instrumentation hooks asm-generic/bitops: Use instrument_read_write() where appropriate locking/atomics: Use read-write instrumentation for atomic RMWs include/asm-generic/atomic-instrumented.h | 330 +++++++++--------- .../asm-generic/bitops/instrumented-atomic.h | 6 +- .../asm-generic/bitops/instrumented-lock.h | 2 +- .../bitops/instrumented-non-atomic.h | 6 +- include/linux/instrumented.h | 30 ++ include/linux/kcsan-checks.h | 45 ++- kernel/kcsan/core.c | 51 ++- kernel/kcsan/kcsan-test.c | 65 +++- kernel/kcsan/report.c | 4 + lib/Kconfig.kcsan | 5 + scripts/Makefile.kcsan | 2 +- scripts/atomic/gen-atomic-instrumented.sh | 21 +- tools/objtool/check.c | 5 + 13 files changed, 354 insertions(+), 218 deletions(-) -- 2.28.0.rc0.142.g3c755180ce-goog