From: Lai Jiangshan <laijs@linux.alibaba.com>
And it will be extended for C entry code.
Cc: Borislav Petkov <bp@alien8.de>
Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
---
include/linux/compiler_types.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 4f2a819fd60a..e9ce11ea4d8b 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -227,9 +227,11 @@ struct ftrace_likely_data {
#endif
/* Section for code which can't be instrumented at all */
-#define noinstr \
- noinline notrace __attribute((__section__(".noinstr.text"))) \
- __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
+#define __noinstr_section(section) \
+ noinline notrace __section(section) __no_profile \
+ __no_kcsan __no_sanitize_address __no_sanitize_coverage
+
+#define noinstr __noinstr_section(".noinstr.text")
#endif /* __KERNEL__ */
--
2.36.1
On Sat, Oct 01, 2022 at 09:24:44PM -0400, guoren@kernel.org wrote:
> From: Lai Jiangshan <laijs@linux.alibaba.com>
>
> And it will be extended for C entry code.
>
> Cc: Borislav Petkov <bp@alien8.de>
> Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
> Reviewed-by: Kees Cook <keescook@chromium.org>
> Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
> Suggested-by: Peter Zijlstra <peterz@infradead.org>
> Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> ---
> include/linux/compiler_types.h | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> index 4f2a819fd60a..e9ce11ea4d8b 100644
> --- a/include/linux/compiler_types.h
> +++ b/include/linux/compiler_types.h
> @@ -227,9 +227,11 @@ struct ftrace_likely_data {
> #endif
>
> /* Section for code which can't be instrumented at all */
> -#define noinstr \
> - noinline notrace __attribute((__section__(".noinstr.text"))) \
> - __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
> +#define __noinstr_section(section) \
> + noinline notrace __section(section) __no_profile \
> + __no_kcsan __no_sanitize_address __no_sanitize_coverage
> +
> +#define noinstr __noinstr_section(".noinstr.text")
One thing proably worth noting here is that while KPROBES will avoid
instrumenting `.noinstr.text`, that won't happen automatically for other
__noinstr_section() sections, and that will need to be inhibited through other
means (e.g. the kprobes blacklist, explicit NOKPROBE_SYMBOL() annotation, or
otherwise).
Thanks,
Mark.
On Mon, Oct 3, 2022 at 7:39 PM Mark Rutland <mark.rutland@arm.com> wrote:
>
> On Sat, Oct 01, 2022 at 09:24:44PM -0400, guoren@kernel.org wrote:
> > From: Lai Jiangshan <laijs@linux.alibaba.com>
> >
> > And it will be extended for C entry code.
> >
> > Cc: Borislav Petkov <bp@alien8.de>
> > Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
> > Reviewed-by: Kees Cook <keescook@chromium.org>
> > Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
> > Suggested-by: Peter Zijlstra <peterz@infradead.org>
> > Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> > ---
> > include/linux/compiler_types.h | 8 +++++---
> > 1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> > index 4f2a819fd60a..e9ce11ea4d8b 100644
> > --- a/include/linux/compiler_types.h
> > +++ b/include/linux/compiler_types.h
> > @@ -227,9 +227,11 @@ struct ftrace_likely_data {
> > #endif
> >
> > /* Section for code which can't be instrumented at all */
> > -#define noinstr \
> > - noinline notrace __attribute((__section__(".noinstr.text"))) \
> > - __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
> > +#define __noinstr_section(section) \
> > + noinline notrace __section(section) __no_profile \
> > + __no_kcsan __no_sanitize_address __no_sanitize_coverage
> > +
> > +#define noinstr __noinstr_section(".noinstr.text")
>
> One thing proably worth noting here is that while KPROBES will avoid
> instrumenting `.noinstr.text`, that won't happen automatically for other
> __noinstr_section() sections, and that will need to be inhibited through other
> means (e.g. the kprobes blacklist, explicit NOKPROBE_SYMBOL() annotation, or
> otherwise).
In riscv, "we select HAVE_KPROBES if !XIP_KERNEL", so don't worry
about that. I don't think we could enable kprobe for XIP_KERNEL in the
future.
>
> Thanks,
> Mark.
--
Best Regards
Guo Ren
On Sat, Oct 08, 2022 at 09:54:39AM +0800, Guo Ren wrote:
> On Mon, Oct 3, 2022 at 7:39 PM Mark Rutland <mark.rutland@arm.com> wrote:
> >
> > On Sat, Oct 01, 2022 at 09:24:44PM -0400, guoren@kernel.org wrote:
> > > From: Lai Jiangshan <laijs@linux.alibaba.com>
> > >
> > > And it will be extended for C entry code.
> > >
> > > Cc: Borislav Petkov <bp@alien8.de>
> > > Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
> > > Reviewed-by: Kees Cook <keescook@chromium.org>
> > > Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
> > > Suggested-by: Peter Zijlstra <peterz@infradead.org>
> > > Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> > > ---
> > > include/linux/compiler_types.h | 8 +++++---
> > > 1 file changed, 5 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> > > index 4f2a819fd60a..e9ce11ea4d8b 100644
> > > --- a/include/linux/compiler_types.h
> > > +++ b/include/linux/compiler_types.h
> > > @@ -227,9 +227,11 @@ struct ftrace_likely_data {
> > > #endif
> > >
> > > /* Section for code which can't be instrumented at all */
> > > -#define noinstr \
> > > - noinline notrace __attribute((__section__(".noinstr.text"))) \
> > > - __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
> > > +#define __noinstr_section(section) \
> > > + noinline notrace __section(section) __no_profile \
> > > + __no_kcsan __no_sanitize_address __no_sanitize_coverage
> > > +
> > > +#define noinstr __noinstr_section(".noinstr.text")
> >
> > One thing proably worth noting here is that while KPROBES will avoid
> > instrumenting `.noinstr.text`, that won't happen automatically for other
> > __noinstr_section() sections, and that will need to be inhibited through other
> > means (e.g. the kprobes blacklist, explicit NOKPROBE_SYMBOL() annotation, or
> > otherwise).
>
> In riscv, "we select HAVE_KPROBES if !XIP_KERNEL", so don't worry
> about that. I don't think we could enable kprobe for XIP_KERNEL in the
> future.
Sure; but someone else might use __noinstr_section() elsewhere where this could
matter, and I was suggesting that we could add a comment as above.
Thanks,
Mark.
Hi Mark and Lai,
On Thu, Oct 20, 2022 at 5:15 PM Mark Rutland <mark.rutland@arm.com> wrote:
>
> On Sat, Oct 08, 2022 at 09:54:39AM +0800, Guo Ren wrote:
> > On Mon, Oct 3, 2022 at 7:39 PM Mark Rutland <mark.rutland@arm.com> wrote:
> > >
> > > On Sat, Oct 01, 2022 at 09:24:44PM -0400, guoren@kernel.org wrote:
> > > > From: Lai Jiangshan <laijs@linux.alibaba.com>
> > > >
> > > > And it will be extended for C entry code.
> > > >
> > > > Cc: Borislav Petkov <bp@alien8.de>
> > > > Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
> > > > Reviewed-by: Kees Cook <keescook@chromium.org>
> > > > Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
> > > > Suggested-by: Peter Zijlstra <peterz@infradead.org>
> > > > Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> > > > ---
> > > > include/linux/compiler_types.h | 8 +++++---
> > > > 1 file changed, 5 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> > > > index 4f2a819fd60a..e9ce11ea4d8b 100644
> > > > --- a/include/linux/compiler_types.h
> > > > +++ b/include/linux/compiler_types.h
> > > > @@ -227,9 +227,11 @@ struct ftrace_likely_data {
> > > > #endif
> > > >
> > > > /* Section for code which can't be instrumented at all */
> > > > -#define noinstr \
> > > > - noinline notrace __attribute((__section__(".noinstr.text"))) \
> > > > - __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
> > > > +#define __noinstr_section(section) \
> > > > + noinline notrace __section(section) __no_profile \
> > > > + __no_kcsan __no_sanitize_address __no_sanitize_coverage
> > > > +
> > > > +#define noinstr __noinstr_section(".noinstr.text")
> > >
> > > One thing proably worth noting here is that while KPROBES will avoid
> > > instrumenting `.noinstr.text`, that won't happen automatically for other
> > > __noinstr_section() sections, and that will need to be inhibited through other
> > > means (e.g. the kprobes blacklist, explicit NOKPROBE_SYMBOL() annotation, or
> > > otherwise).
> >
> > In riscv, "we select HAVE_KPROBES if !XIP_KERNEL", so don't worry
> > about that. I don't think we could enable kprobe for XIP_KERNEL in the
> > future.
>
> Sure; but someone else might use __noinstr_section() elsewhere where this could
> matter, and I was suggesting that we could add a comment as above.
Okay, how about:
/* Be care KPROBES will avoid instrumenting .noinstr.text, not
__noinstr_section(). */
#define __noinstr_section(section) \
noinline notrace __section(section) __no_profile \
__no_kcsan __no_sanitize_address __no_sanitize_coverage
/* Section for code which can't be instrumented at all */
#define noinstr __noinstr_section(".noinstr.text")
>
> Thanks,
> Mark.
--
Best Regards
Guo Ren
On Thu, Oct 20, 2022 at 08:29:28PM +0800, Guo Ren wrote:
> Hi Mark and Lai,
>
> On Thu, Oct 20, 2022 at 5:15 PM Mark Rutland <mark.rutland@arm.com> wrote:
> >
> > On Sat, Oct 08, 2022 at 09:54:39AM +0800, Guo Ren wrote:
> > > On Mon, Oct 3, 2022 at 7:39 PM Mark Rutland <mark.rutland@arm.com> wrote:
> > > >
> > > > On Sat, Oct 01, 2022 at 09:24:44PM -0400, guoren@kernel.org wrote:
> > > > > From: Lai Jiangshan <laijs@linux.alibaba.com>
> > > > >
> > > > > And it will be extended for C entry code.
> > > > >
> > > > > Cc: Borislav Petkov <bp@alien8.de>
> > > > > Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
> > > > > Reviewed-by: Kees Cook <keescook@chromium.org>
> > > > > Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
> > > > > Suggested-by: Peter Zijlstra <peterz@infradead.org>
> > > > > Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> > > > > ---
> > > > > include/linux/compiler_types.h | 8 +++++---
> > > > > 1 file changed, 5 insertions(+), 3 deletions(-)
> > > > >
> > > > > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> > > > > index 4f2a819fd60a..e9ce11ea4d8b 100644
> > > > > --- a/include/linux/compiler_types.h
> > > > > +++ b/include/linux/compiler_types.h
> > > > > @@ -227,9 +227,11 @@ struct ftrace_likely_data {
> > > > > #endif
> > > > >
> > > > > /* Section for code which can't be instrumented at all */
> > > > > -#define noinstr \
> > > > > - noinline notrace __attribute((__section__(".noinstr.text"))) \
> > > > > - __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage
> > > > > +#define __noinstr_section(section) \
> > > > > + noinline notrace __section(section) __no_profile \
> > > > > + __no_kcsan __no_sanitize_address __no_sanitize_coverage
> > > > > +
> > > > > +#define noinstr __noinstr_section(".noinstr.text")
> > > >
> > > > One thing proably worth noting here is that while KPROBES will avoid
> > > > instrumenting `.noinstr.text`, that won't happen automatically for other
> > > > __noinstr_section() sections, and that will need to be inhibited through other
> > > > means (e.g. the kprobes blacklist, explicit NOKPROBE_SYMBOL() annotation, or
> > > > otherwise).
> > >
> > > In riscv, "we select HAVE_KPROBES if !XIP_KERNEL", so don't worry
> > > about that. I don't think we could enable kprobe for XIP_KERNEL in the
> > > future.
> >
> > Sure; but someone else might use __noinstr_section() elsewhere where this could
> > matter, and I was suggesting that we could add a comment as above.
> Okay, how about:
>
> /* Be care KPROBES will avoid instrumenting .noinstr.text, not
> __noinstr_section(). */
> #define __noinstr_section(section) \
> noinline notrace __section(section) __no_profile \
> __no_kcsan __no_sanitize_address __no_sanitize_coverage
How about we split this like:
| /*
| * Prevent the compiler from instrumenting this code in any way
| * This does not prevent instrumentation via KPROBES, which must be
| * prevented through other means if necessary.
| */
| #define __no_compiler_instrument \
| noinline notrace noinline notrace __no_kcsan \
| __no_sanitize_address __no_sanitize_coverage
|
| /*
| * Section for code which can't be instrumented at all.
| * Any code in this section cannot be instrumented with KPROBES.
| */
| #define noinstr __no_compiler_instrument section(".noinstr.text")
... then we don't need __noinstr_section(), and IMO the split is
clearer.
Peter?
Thanks,
Mark.
On Mon, Oct 24, 2022 at 12:56:03PM +0100, Mark Rutland wrote:
> How about we split this like:
>
> | /*
> | * Prevent the compiler from instrumenting this code in any way
> | * This does not prevent instrumentation via KPROBES, which must be
> | * prevented through other means if necessary.
Perhaps point to NOINSTR_TEXT in vmlinux.lds.h
> | */
> | #define __no_compiler_instrument \
> | noinline notrace noinline notrace __no_kcsan \
> | __no_sanitize_address __no_sanitize_coverage
> |
> | /*
> | * Section for code which can't be instrumented at all.
> | * Any code in this section cannot be instrumented with KPROBES.
> | */
> | #define noinstr __no_compiler_instrument section(".noinstr.text")
>
> ... then we don't need __noinstr_section(), and IMO the split is
> clearer.
Yeah, perhaps, no strong feelings. Note I have this in the sched-idle
series as well (which I still need to rebase and repost :/).
On Mon, Oct 24, 2022 at 02:06:04PM +0200, Peter Zijlstra wrote:
> On Mon, Oct 24, 2022 at 12:56:03PM +0100, Mark Rutland wrote:
>
> > How about we split this like:
> >
> > | /*
> > | * Prevent the compiler from instrumenting this code in any way
> > | * This does not prevent instrumentation via KPROBES, which must be
> > | * prevented through other means if necessary.
>
> Perhaps point to NOINSTR_TEXT in vmlinux.lds.h
Makes sense, will do.
>
> > | */
> > | #define __no_compiler_instrument \
> > | noinline notrace noinline notrace __no_kcsan \
> > | __no_sanitize_address __no_sanitize_coverage
> > |
> > | /*
> > | * Section for code which can't be instrumented at all.
> > | * Any code in this section cannot be instrumented with KPROBES.
> > | */
> > | #define noinstr __no_compiler_instrument section(".noinstr.text")
> >
> > ... then we don't need __noinstr_section(), and IMO the split is
> > clearer.
>
> Yeah, perhaps, no strong feelings. Note I have this in the sched-idle
> series as well (which I still need to rebase and repost :/).
Ah; I'll sit on this for now then, and once that's all in I can send a
cleanup/rework patch. Sorry for the noise!
Thanks,
Mark.
On Mon, Oct 24, 2022 at 8:14 PM Mark Rutland <mark.rutland@arm.com> wrote:
>
> On Mon, Oct 24, 2022 at 02:06:04PM +0200, Peter Zijlstra wrote:
> > On Mon, Oct 24, 2022 at 12:56:03PM +0100, Mark Rutland wrote:
> >
> > > How about we split this like:
> > >
> > > | /*
> > > | * Prevent the compiler from instrumenting this code in any way
> > > | * This does not prevent instrumentation via KPROBES, which must be
> > > | * prevented through other means if necessary.
> >
> > Perhaps point to NOINSTR_TEXT in vmlinux.lds.h
>
> Makes sense, will do.
Do I need to update the comment with NOINSTR_TEXT? eg:
* Prevent the compiler from instrumenting this code in any way
* This does not prevent instrumentation via KPROBES, which must be
* prevented through other means if necessary. See NOINSTR_TEXT
* in vmlinux.lds.h.
>
> >
> > > | */
> > > | #define __no_compiler_instrument \
> > > | noinline notrace noinline notrace __no_kcsan \
> > > | __no_sanitize_address __no_sanitize_coverage
> > > |
> > > | /*
> > > | * Section for code which can't be instrumented at all.
> > > | * Any code in this section cannot be instrumented with KPROBES.
> > > | */
> > > | #define noinstr __no_compiler_instrument section(".noinstr.text")
> > >
> > > ... then we don't need __noinstr_section(), and IMO the split is
> > > clearer.
> >
> > Yeah, perhaps, no strong feelings. Note I have this in the sched-idle
> > series as well (which I still need to rebase and repost :/).
>
> Ah; I'll sit on this for now then, and once that's all in I can send a
> cleanup/rework patch. Sorry for the noise!
We still keep __noinstr_section(), right?
>
> Thanks,
> Mark.
--
Best Regards
Guo Ren
On Tue, Oct 25, 2022 at 10:51:02AM +0800, Guo Ren wrote:
> On Mon, Oct 24, 2022 at 8:14 PM Mark Rutland <mark.rutland@arm.com> wrote:
> >
> > On Mon, Oct 24, 2022 at 02:06:04PM +0200, Peter Zijlstra wrote:
> > > On Mon, Oct 24, 2022 at 12:56:03PM +0100, Mark Rutland wrote:
> > >
> > > > How about we split this like:
> > > >
> > > > | /*
> > > > | * Prevent the compiler from instrumenting this code in any way
> > > > | * This does not prevent instrumentation via KPROBES, which must be
> > > > | * prevented through other means if necessary.
> > >
> > > Perhaps point to NOINSTR_TEXT in vmlinux.lds.h
> >
> > Makes sense, will do.
> Do I need to update the comment with NOINSTR_TEXT? eg:
>
> * Prevent the compiler from instrumenting this code in any way
> * This does not prevent instrumentation via KPROBES, which must be
> * prevented through other means if necessary. See NOINSTR_TEXT
> * in vmlinux.lds.h.
I think given Peter's reply we can leave the patch as-is for now, and we can
leave commentary or other changes to a later follow up. I'm happy to propose
patches for that once the existing bits are merged.
Sorry for confusing matters!
> > > > | */
> > > > | #define __no_compiler_instrument \
> > > > | noinline notrace noinline notrace __no_kcsan \
> > > > | __no_sanitize_address __no_sanitize_coverage
> > > > |
> > > > | /*
> > > > | * Section for code which can't be instrumented at all.
> > > > | * Any code in this section cannot be instrumented with KPROBES.
> > > > | */
> > > > | #define noinstr __no_compiler_instrument section(".noinstr.text")
> > > >
> > > > ... then we don't need __noinstr_section(), and IMO the split is
> > > > clearer.
> > >
> > > Yeah, perhaps, no strong feelings. Note I have this in the sched-idle
> > > series as well (which I still need to rebase and repost :/).
> >
> > Ah; I'll sit on this for now then, and once that's all in I can send a
> > cleanup/rework patch. Sorry for the noise!
> We still keep __noinstr_section(), right?
Yes -- for now this patch can stay as-is, and __noinstr_section() will remain.
Thanks,
Mark.
© 2016 - 2026 Red Hat, Inc.