Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp7244747ybp; Wed, 16 Oct 2019 06:04:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqyrDsR/JO/WutIfPfswOt0ZndvVWMrudFhNZGK6OOlMLCimnwEHXdp9tj7r8a0T1vcpB2pn X-Received: by 2002:a17:906:7f03:: with SMTP id d3mr41055478ejr.209.1571231044567; Wed, 16 Oct 2019 06:04:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571231044; cv=none; d=google.com; s=arc-20160816; b=Tr7jdUJqC6yDhC6342lkzur7/05VKUCSoLeD3TidccfTsIUGTU+YV6fhHOWmbG3tAg uskM1dGPt1WpVOHkX3JU6uPkOrJtDyhwDnzXcg9MctpnLUcW6NET8LLPtGDrtyCPJfrL qHeq/N9gUEqVdVoiw+3Mtn/J4uQ82qumzRxAnaMYFNN8Dd04EJdWK7zAnYzRycpW8/Gy W7RTnsNj9rehYHTSqx6iLDJdBrGbBkpVWjZpDXWquyUoKAC/CBVIoDb/UDK/F3Tdw/IH JIYKCO8Ij1Ut9nMXM6VlR0Ahtf3hF0o+n4yKAglIpJ5+cg/X2tqZh4ZOOYA7NaQ3JxXG X1lg== 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=IToO3TxaVYb6aPcdpP1nSr/83vwykcAUYMHrIbrPyZM=; b=Fu3t5DuqdFXCfcpf5Xu57uHKC0DIwBBR87mprdJWzM9Rr7Dyq4EbvyekrhSfG2tT5Z u6BGabUo/8CwG1TFntea7VC9EGcEQ3lgb0ZQAmWuTKNWtpKu9haGaZBdd3EO/jnpkwJl lpn0Cff1mBh2IpRDi82dIT/JNdW6l8v79skB65y5hqJeJ0s85jH2yLulvM9TPwWGaGCq cP2FtFHQU55E/2BLuo5pBNUWyt9RFKttduPTTvWyzMYZzsKyAZe6x4ehy5aQnrYXj/Fy 9lPpwxkkttuA2xp/ySyleBPEMLULh+pN4d5lzqzw7aSdJgRomncCH0KzCdZIbnhTMUq6 zhaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=bvnoMqX1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id c4si18734641edb.387.2019.10.16.06.03.38; Wed, 16 Oct 2019 06:04:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=bvnoMqX1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S2391730AbfJPIlN (ORCPT + 99 others); Wed, 16 Oct 2019 04:41:13 -0400 Received: from mail-wr1-f74.google.com ([209.85.221.74]:56172 "EHLO mail-wr1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391725AbfJPIlM (ORCPT ); Wed, 16 Oct 2019 04:41:12 -0400 Received: by mail-wr1-f74.google.com with SMTP id o10so11366463wrm.22 for ; Wed, 16 Oct 2019 01:41:09 -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=IToO3TxaVYb6aPcdpP1nSr/83vwykcAUYMHrIbrPyZM=; b=bvnoMqX1QbYIiaLaOnBf6P75OThWz1ivuMxMGEARq3NxCSJ+Fp5ovc8mUyctAKbV9+ 0x8JxgVhIZcPWzSzL/8lez8bUvcQNX+Md4BUsE5TCxh7+0/3+YWfLBTxilKHr3DpUTOk mnMo0kiOJ48QAUSnHtn1K1gwA1BSeUcSVbWp1N5IMUZBbhD9h8eCgrrZ3inqJQdwJQMC KaUhLKPYbNdY0ooUMhr9GO67DbIY2AAiFnPVjxIKqAnkI9x0aqOWdR/PA2UWef+HriwL W68dazCkLZGO2SveHpLXcUgd1K2ZnTD5yBWVpy2KyEBd3QzX5XwHoF4fVaD/Oj19FTLG stmQ== 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=IToO3TxaVYb6aPcdpP1nSr/83vwykcAUYMHrIbrPyZM=; b=Wgp/HzSrZXY3EL+e7oJ0TVv1/tLLN+WCV5hBxPb8vfvXXCFmG5fAITLc1z5BdNw9C/ gIMoVRvO//GyqSs6hQMHbHmso/4jxLfPc7kI7gpmVONc5emVcgm8fOw+9fnvXgP8UdSU i+ebx/JJCsjwoQlfZmXUP/eHC+XcjCo/Bqv0zupqtVdG52NqGcYgPSwiroz+wuQHsZUB hj4nnFb/wsoXYQKnj84Ub8ufyFA3LGmBEZ5cES34BtJqkJ7CN0+Okr/xvPHzkbsR3jJ/ D+uUKaO/m892ymMPh3hYU0PyaNADGJD7IBnGipiNPPQsj0hZDRH1s4AZLbajnQEXUrkg za5w== X-Gm-Message-State: APjAAAU8TVojFQISz6ZwmUED2PmMNc8WuktUWSIxue+RZAdXr4pdmNeR 50MYVKVenIGHQAgujMc+gJPsnIDXdA== X-Received: by 2002:adf:fecd:: with SMTP id q13mr1712303wrs.224.1571215267988; Wed, 16 Oct 2019 01:41:07 -0700 (PDT) Date: Wed, 16 Oct 2019 10:39:51 +0200 Message-Id: <20191016083959.186860-1-elver@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.23.0.700.g56cf767bdb-goog Subject: [PATCH 0/8] Add Kernel Concurrency Sanitizer (KCSAN) From: Marco Elver To: elver@google.com Cc: akiyks@gmail.com, stern@rowland.harvard.edu, glider@google.com, parri.andrea@gmail.com, andreyknvl@google.com, luto@kernel.org, ard.biesheuvel@linaro.org, arnd@arndb.de, boqun.feng@gmail.com, bp@alien8.de, dja@axtens.net, dlustig@nvidia.com, dave.hansen@linux.intel.com, dhowells@redhat.com, dvyukov@google.com, hpa@zytor.com, mingo@redhat.com, j.alglave@ucl.ac.uk, joel@joelfernandes.org, corbet@lwn.net, jpoimboe@redhat.com, luc.maranget@inria.fr, mark.rutland@arm.com, npiggin@gmail.com, paulmck@linux.ibm.com, peterz@infradead.org, tglx@linutronix.de, will@kernel.org, kasan-dev@googlegroups.com, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-efi@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@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 is the patch-series for the Kernel Concurrency Sanitizer (KCSAN). KCSAN is a sampling watchpoint-based data-race detector. More details are included in Documentation/dev-tools/kcsan.rst. This patch-series only enables KCSAN for x86, but we expect adding support for other architectures is relatively straightforward (we are aware of experimental ARM64 and POWER support). To gather early feedback, we announced KCSAN back in September, and have integrated the feedback where possible: http://lkml.kernel.org/r/CANpmjNPJ_bHjfLZCAPV23AXFfiPiyXXqqu72n6TgWzb2Gnu1eA@mail.gmail.com We want to point out and acknowledge the work surrounding the LKMM, including several articles that motivate why data-races are dangerous [1, 2], justifying a data-race detector such as KCSAN. [1] https://lwn.net/Articles/793253/ [2] https://lwn.net/Articles/799218/ The current list of known upstream fixes for data-races found by KCSAN can be found here: https://github.com/google/ktsan/wiki/KCSAN#upstream-fixes-of-data-races-found-by-kcsan Marco Elver (8): kcsan: Add Kernel Concurrency Sanitizer infrastructure objtool, kcsan: Add KCSAN runtime functions to whitelist build, kcsan: Add KCSAN build exceptions seqlock, kcsan: Add annotations for KCSAN seqlock: Require WRITE_ONCE surrounding raw_seqcount_barrier asm-generic, kcsan: Add KCSAN instrumentation for bitops locking/atomics, kcsan: Add KCSAN instrumentation x86, kcsan: Enable KCSAN for x86 Documentation/dev-tools/kcsan.rst | 202 ++++++++++ MAINTAINERS | 11 + Makefile | 3 +- arch/x86/Kconfig | 1 + arch/x86/boot/Makefile | 1 + arch/x86/boot/compressed/Makefile | 1 + arch/x86/entry/vdso/Makefile | 1 + arch/x86/include/asm/bitops.h | 2 +- arch/x86/kernel/Makefile | 6 + arch/x86/kernel/cpu/Makefile | 3 + arch/x86/lib/Makefile | 2 + arch/x86/mm/Makefile | 3 + arch/x86/purgatory/Makefile | 1 + arch/x86/realmode/Makefile | 1 + arch/x86/realmode/rm/Makefile | 1 + drivers/firmware/efi/libstub/Makefile | 1 + include/asm-generic/atomic-instrumented.h | 192 ++++++++- include/asm-generic/bitops-instrumented.h | 18 + include/linux/compiler-clang.h | 9 + include/linux/compiler-gcc.h | 7 + include/linux/compiler.h | 35 +- include/linux/kcsan-checks.h | 116 ++++++ include/linux/kcsan.h | 85 ++++ include/linux/sched.h | 7 + include/linux/seqlock.h | 51 ++- init/init_task.c | 6 + init/main.c | 2 + kernel/Makefile | 6 + kernel/kcsan/Makefile | 14 + kernel/kcsan/atomic.c | 21 + kernel/kcsan/core.c | 458 ++++++++++++++++++++++ kernel/kcsan/debugfs.c | 225 +++++++++++ kernel/kcsan/encoding.h | 94 +++++ kernel/kcsan/kcsan.c | 81 ++++ kernel/kcsan/kcsan.h | 140 +++++++ kernel/kcsan/report.c | 307 +++++++++++++++ kernel/kcsan/test.c | 117 ++++++ kernel/sched/Makefile | 6 + lib/Kconfig.debug | 2 + lib/Kconfig.kcsan | 88 +++++ lib/Makefile | 3 + mm/Makefile | 8 + scripts/Makefile.kcsan | 6 + scripts/Makefile.lib | 10 + scripts/atomic/gen-atomic-instrumented.sh | 9 +- tools/objtool/check.c | 17 + 46 files changed, 2364 insertions(+), 16 deletions(-) create mode 100644 Documentation/dev-tools/kcsan.rst create mode 100644 include/linux/kcsan-checks.h create mode 100644 include/linux/kcsan.h create mode 100644 kernel/kcsan/Makefile create mode 100644 kernel/kcsan/atomic.c create mode 100644 kernel/kcsan/core.c create mode 100644 kernel/kcsan/debugfs.c create mode 100644 kernel/kcsan/encoding.h create mode 100644 kernel/kcsan/kcsan.c create mode 100644 kernel/kcsan/kcsan.h create mode 100644 kernel/kcsan/report.c create mode 100644 kernel/kcsan/test.c create mode 100644 lib/Kconfig.kcsan create mode 100644 scripts/Makefile.kcsan -- 2.23.0.700.g56cf767bdb-goog