All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] Locking: Add the Kernel Concurrency Sanitizer (KCSAN) subsystem
@ 2019-11-25 12:11 Ingo Molnar
  0 siblings, 0 replies; only message in thread
From: Ingo Molnar @ 2019-11-25 12:11 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: linux-kernel, Paul E. McKenney, Peter Zijlstra, Will Deacon,
	Marco Elver, Thomas Gleixner, Andrew Morton

Linus,

Please pull the latest locking-kcsan-for-linus git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking-kcsan-for-linus

   # HEAD: 5cbaefe9743bf14c9d3106db0cc19f8cb0a3ca22 kcsan: Improve various small stylistic details

This tree adds the Kernel Concurrency Sanitizer (KCSAN) subsystem 
authored by Marco Elver, which is a debugging facility that uses compiler 
instrumentation of data accesses to statistically detect and report data 
races on live kernels.

KCSAN uses the -fsanitize=thread build time instrumentation features of 
both GCC and Clang, which transforms all memory reads/writes into 
__tsan_*callbacks with addresses and access type flags passed in that 
KCSAN can process and turn into a global array of 'watchpoints' that 
denote ongoing accesses. If two CPUs happen upon each other via an unsafe 
(non-atomic) access then a warning is generated.

Most users probably don't want to enable CONFIG_KCSAN due to the 
significant runtime overhead, bloat and the intentional udelay()s added 
to widen data races:

   text     data    bss	
   19769486 5201776 1613896 vmlinux.defconfig
   30181608 5313912 1675336 vmlinux.defconfig.CONFIG_KCSAN=y

... but for kernel developers it's a powerful facility that has already 
found a number of concurrency bugs.

There's a significant set of false positives and early and low level code 
complications that require the whitelisting and blacklisting of various 
pieces of kernel code - but in practice the code is already functional 
enough to find races.

 Thanks,

	Ingo

------------------>
Ingo Molnar (1):
      kcsan: Improve various small stylistic details

Marco Elver (9):
      kcsan: Add Kernel Concurrency Sanitizer infrastructure
      include/linux/compiler.h: Introduce data_race(expr) macro
      kcsan: Add Documentation entry in dev-tools
      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
      locking/atomics, kcsan: Add KCSAN instrumentation
      x86, kcsan: Enable KCSAN for x86


 Documentation/dev-tools/index.rst         |   1 +
 Documentation/dev-tools/kcsan.rst         | 256 ++++++++++++
 MAINTAINERS                               |  11 +
 Makefile                                  |   3 +-
 arch/x86/Kconfig                          |   1 +
 arch/x86/boot/Makefile                    |   2 +
 arch/x86/boot/compressed/Makefile         |   2 +
 arch/x86/entry/vdso/Makefile              |   3 +
 arch/x86/include/asm/bitops.h             |   6 +-
 arch/x86/kernel/Makefile                  |   4 +
 arch/x86/kernel/cpu/Makefile              |   3 +
 arch/x86/lib/Makefile                     |   4 +
 arch/x86/mm/Makefile                      |   4 +
 arch/x86/purgatory/Makefile               |   2 +
 arch/x86/realmode/Makefile                |   3 +
 arch/x86/realmode/rm/Makefile             |   3 +
 drivers/firmware/efi/libstub/Makefile     |   2 +
 include/asm-generic/atomic-instrumented.h | 393 ++++++++++---------
 include/linux/compiler-clang.h            |  11 +-
 include/linux/compiler-gcc.h              |   7 +
 include/linux/compiler.h                  |  57 ++-
 include/linux/kcsan-checks.h              |  93 +++++
 include/linux/kcsan.h                     | 108 ++++++
 include/linux/sched.h                     |   4 +
 include/linux/seqlock.h                   |  51 ++-
 init/init_task.c                          |   8 +
 init/main.c                               |   2 +
 kernel/Makefile                           |   6 +
 kernel/kcsan/Makefile                     |  11 +
 kernel/kcsan/atomic.h                     |  27 ++
 kernel/kcsan/core.c                       | 621 ++++++++++++++++++++++++++++++
 kernel/kcsan/debugfs.c                    | 271 +++++++++++++
 kernel/kcsan/encoding.h                   |  95 +++++
 kernel/kcsan/kcsan.h                      | 109 ++++++
 kernel/kcsan/report.c                     | 318 +++++++++++++++
 kernel/kcsan/test.c                       | 121 ++++++
 kernel/sched/Makefile                     |   6 +
 lib/Kconfig.debug                         |   2 +
 lib/Kconfig.kcsan                         | 116 ++++++
 lib/Makefile                              |   3 +
 mm/Makefile                               |   8 +
 scripts/Makefile.kcsan                    |   6 +
 scripts/Makefile.lib                      |  10 +
 scripts/atomic/gen-atomic-instrumented.sh |  17 +-
 tools/objtool/check.c                     |  18 +
 45 files changed, 2602 insertions(+), 207 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.h
 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.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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-11-25 12:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-25 12:11 [GIT PULL] Locking: Add the Kernel Concurrency Sanitizer (KCSAN) subsystem Ingo Molnar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.