All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] KCSAN cleanups and noinstr
@ 2020-06-02 17:31 Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 1/3] x86, kcsan: Remove __no_kcsan_or_inline usage Peter Zijlstra
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Peter Zijlstra @ 2020-06-02 17:31 UTC (permalink / raw)
  To: tglx; +Cc: x86, elver, paulmck, kasan-dev, linux-kernel, peterz

Hi all,

Here's two KCSAN cleanups and the required noinstr change for x86.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] x86, kcsan: Remove __no_kcsan_or_inline usage
  2020-06-02 17:31 [PATCH 0/3] KCSAN cleanups and noinstr Peter Zijlstra
@ 2020-06-02 17:31 ` Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 2/3] kcsan: Remove __no_kcsan_or_inline Peter Zijlstra
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Peter Zijlstra @ 2020-06-02 17:31 UTC (permalink / raw)
  To: tglx; +Cc: x86, elver, paulmck, kasan-dev, linux-kernel, peterz

Now that KCSAN relies on -tsan-distinguish-volatile we no longer need
the annotation for constant_test_bit(). Remove it.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 arch/x86/include/asm/bitops.h |    6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

--- a/arch/x86/include/asm/bitops.h
+++ b/arch/x86/include/asm/bitops.h
@@ -201,12 +201,8 @@ arch_test_and_change_bit(long nr, volati
 	return GEN_BINARY_RMWcc(LOCK_PREFIX __ASM_SIZE(btc), *addr, c, "Ir", nr);
 }
 
-static __no_kcsan_or_inline bool constant_test_bit(long nr, const volatile unsigned long *addr)
+static __always_inline bool constant_test_bit(long nr, const volatile unsigned long *addr)
 {
-	/*
-	 * Because this is a plain access, we need to disable KCSAN here to
-	 * avoid double instrumentation via instrumented bitops.
-	 */
 	return ((1UL << (nr & (BITS_PER_LONG-1))) &
 		(addr[nr >> _BITOPS_LONG_SHIFT])) != 0;
 }



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/3] kcsan: Remove __no_kcsan_or_inline
  2020-06-02 17:31 [PATCH 0/3] KCSAN cleanups and noinstr Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 1/3] x86, kcsan: Remove __no_kcsan_or_inline usage Peter Zijlstra
@ 2020-06-02 17:31 ` Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 3/3] x86, kcsan: Add __no_kcsan to noinstr Peter Zijlstra
  2020-06-02 18:46 ` [PATCH 0/3] KCSAN cleanups and noinstr Marco Elver
  3 siblings, 0 replies; 5+ messages in thread
From: Peter Zijlstra @ 2020-06-02 17:31 UTC (permalink / raw)
  To: tglx; +Cc: x86, elver, paulmck, kasan-dev, linux-kernel, peterz

There are no more user of this function attribute, also, with us now
actively supporting '__no_kcsan inline' it doesn't make sense to have
in any case.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 Documentation/dev-tools/kcsan.rst |    6 ------
 include/linux/compiler_types.h    |    5 +----
 2 files changed, 1 insertion(+), 10 deletions(-)

--- a/Documentation/dev-tools/kcsan.rst
+++ b/Documentation/dev-tools/kcsan.rst
@@ -114,12 +114,6 @@ functions, compilation units, or entire
   To dynamically limit for which functions to generate reports, see the
   `DebugFS interface`_ blacklist/whitelist feature.
 
-  For ``__always_inline`` functions, replace ``__always_inline`` with
-  ``__no_kcsan_or_inline`` (which implies ``__always_inline``)::
-
-    static __no_kcsan_or_inline void foo(void) {
-        ...
-
 * To disable data race detection for a particular compilation unit, add to the
   ``Makefile``::
 
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -193,10 +193,7 @@ struct ftrace_likely_data {
 
 #define __no_kcsan __no_sanitize_thread
 #ifdef __SANITIZE_THREAD__
-# define __no_kcsan_or_inline __no_kcsan notrace __maybe_unused
-# define __no_sanitize_or_inline __no_kcsan_or_inline
-#else
-# define __no_kcsan_or_inline __always_inline
+# define __no_sanitize_or_inline __no_kcsan notrace __maybe_unused
 #endif
 
 #ifndef __no_sanitize_or_inline



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/3] x86, kcsan: Add __no_kcsan to noinstr
  2020-06-02 17:31 [PATCH 0/3] KCSAN cleanups and noinstr Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 1/3] x86, kcsan: Remove __no_kcsan_or_inline usage Peter Zijlstra
  2020-06-02 17:31 ` [PATCH 2/3] kcsan: Remove __no_kcsan_or_inline Peter Zijlstra
@ 2020-06-02 17:31 ` Peter Zijlstra
  2020-06-02 18:46 ` [PATCH 0/3] KCSAN cleanups and noinstr Marco Elver
  3 siblings, 0 replies; 5+ messages in thread
From: Peter Zijlstra @ 2020-06-02 17:31 UTC (permalink / raw)
  To: tglx; +Cc: x86, elver, paulmck, kasan-dev, linux-kernel, peterz

The 'noinstr' function attribute means no-instrumentation, this should
very much include *SAN. Because lots of that is broken at present,
only include KCSAN for now, as that is limited to clang11, which has
sane function attribute behaviour.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 include/linux/compiler_types.h |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -118,10 +118,6 @@ struct ftrace_likely_data {
 #define notrace			__attribute__((__no_instrument_function__))
 #endif
 
-/* Section for code which can't be instrumented at all */
-#define noinstr								\
-	noinline notrace __attribute((__section__(".noinstr.text")))
-
 /*
  * it doesn't make sense on ARM (currently the only user of __naked)
  * to trace naked functions because then mcount is called without
@@ -200,6 +196,10 @@ struct ftrace_likely_data {
 #define __no_sanitize_or_inline __always_inline
 #endif
 
+/* Section for code which can't be instrumented at all */
+#define noinstr								\
+	noinline notrace __attribute((__section__(".noinstr.text"))) __no_kcsan
+
 #endif /* __KERNEL__ */
 
 #endif /* __ASSEMBLY__ */



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] KCSAN cleanups and noinstr
  2020-06-02 17:31 [PATCH 0/3] KCSAN cleanups and noinstr Peter Zijlstra
                   ` (2 preceding siblings ...)
  2020-06-02 17:31 ` [PATCH 3/3] x86, kcsan: Add __no_kcsan to noinstr Peter Zijlstra
@ 2020-06-02 18:46 ` Marco Elver
  3 siblings, 0 replies; 5+ messages in thread
From: Marco Elver @ 2020-06-02 18:46 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Thomas Gleixner, the arch/x86 maintainers, Paul E. McKenney,
	kasan-dev, LKML

On Tue, 2 Jun 2020 at 19:34, Peter Zijlstra <peterz@infradead.org> wrote:
>
> Hi all,
>
> Here's two KCSAN cleanups and the required noinstr change for x86.

Thank you!

Reviewed-by: Marco Elver <elver@google.com>

As promised, here are the patches that would take care of KASAN and
UBSAN, rebased on the patches here:
https://lkml.kernel.org/r/20200602184409.22142-1-elver@google.com

Thanks,
-- Marco

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-06-02 18:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-02 17:31 [PATCH 0/3] KCSAN cleanups and noinstr Peter Zijlstra
2020-06-02 17:31 ` [PATCH 1/3] x86, kcsan: Remove __no_kcsan_or_inline usage Peter Zijlstra
2020-06-02 17:31 ` [PATCH 2/3] kcsan: Remove __no_kcsan_or_inline Peter Zijlstra
2020-06-02 17:31 ` [PATCH 3/3] x86, kcsan: Add __no_kcsan to noinstr Peter Zijlstra
2020-06-02 18:46 ` [PATCH 0/3] KCSAN cleanups and noinstr Marco Elver

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.