Re: [PATCH -rcu/kcsan 23/23] objtool, kcsan: Remove memory barrier instrumentation from noinstr
From: Marco Elver <elver@google.com>
Date: 2021-11-11 10:12:32
Also in:
linux-doc, linux-kbuild, linux-mm, lkml
On Tue, 5 Oct 2021 at 17:13, Marco Elver [off-list ref] wrote:
On Tue, Oct 05, 2021 at 04:37PM +0200, Peter Zijlstra wrote:quoted
On Tue, Oct 05, 2021 at 12:59:05PM +0200, Marco Elver wrote:quoted
Teach objtool to turn instrumentation required for memory barrier modeling into nops in noinstr text. The __tsan_func_entry/exit calls are still emitted by compilers even with the __no_sanitize_thread attribute. The memory barrier instrumentation will be inserted explicitly (without compiler help), and thus needs to also explicitly be removed.How is arm64 and others using kernel/entry + noinstr going to fix this? ISTR they fully rely on the compilers not emitting instrumentation, since they don't have objtool to fix up stray issues like this.So this is where I'd like to hear if the approach of: | #if !defined(CONFIG_ARCH_WANTS_NO_INSTR) || defined(CONFIG_STACK_VALIDATION) | ... | #else | #define kcsan_noinstr noinstr | static __always_inline bool within_noinstr(unsigned long ip) | { | return (unsigned long)__noinstr_text_start <= ip && | ip < (unsigned long)__noinstr_text_end; | } | #endif and then (using the !STACK_VALIDATION definitions) | kcsan_noinstr void instrumentation_may_appear_in_noinstr(void) | { | if (within_noinstr(_RET_IP_)) | return; works for the non-x86 arches that select ARCH_WANTS_NO_INSTR. If it doesn't I can easily just remove kcsan_noinstr/within_noinstr, and add a "depends on !ARCH_WANTS_NO_INSTR || STACK_VALIDATION" to the KCSAN_WEAK_MEMORY option. Looking at a previous discussion [1], however, I was under the impression that this would work. [1] https://lkml.kernel.org/r/CANpmjNMAZiW-Er=2QDgGP+_3hg1LOvPYcbfGSPMv=aR6MVTB-g@mail.gmail.com
I'll send v2 of this series after 5.16-rc1. So far I think we haven't been able to say the above doesn't work, which means I'll assume it works on non-x86 architectures with ARCH_WANTS_NO_INSTR until we get evidence of the opposite.