* [PATCH v2 0/2] start_kernel: omit stack canary
@ 2023-04-17 22:00 ndesaulniers
2023-04-17 22:00 ` [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr ndesaulniers
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: ndesaulniers @ 2023-04-17 22:00 UTC (permalink / raw)
To: Borislav Petkov (AMD)
Cc: Peter Zijlstra, Josh Poimboeuf, x86, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Miguel Ojeda,
Nathan Chancellor, Tom Rix, linuxppc-dev, linux-kernel, llvm,
Nick Desaulniers
A security research paper was recently published detailing Catch Handler
Oriented Programming (CHOP) attacks.
https://download.vusec.net/papers/chop_ndss23.pdf
The TL;DR being that C++ structured exception handling runtimes are
attractive gadgets for Jump Oriented Programming (JOP) attacks.
In response to this, a mitigation was developed under embargo in
clang-16 to check the stack canary before calling noreturn functions.
https://bugs.chromium.org/p/llvm/issues/detail?id=30
This started causing boot failures in Android kernel trees downstream of
stable linux-4.14.y that had proto-LTO support, as reported by Nathan
Chancellor.
https://github.com/ClangBuiltLinux/linux/issues/1815
Josh Poimboeuf recently sent a series to explicitly annotate more
functions as noreturn. Nathan noticed the series, and tested it finding
that it now caused boot failures with clang-16+ on mainline (raising the
visibility and urgency of the issue).
https://lore.kernel.org/cover.1680912057.git.jpoimboe@kernel.org/
V2 of this series is rebased on tip/objtool/core @
88b478ee5c7b080b70c68d6e9b3da6c2b518ceb0 now that that series has been
picked up.
Once the embargo was lifted, I asked questions such as "what does C++
structured exception handling have to do with C code" and "surely GCC
didn't ship the same mitigation for C code (narrator: 'They did not:
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=a25982ada523689c8745d7fb4b1b93c8f5dab2e7')?"
I now have a patch out for LLVM to undo this mess (or at least limit it
to C++ functions that may throw, similar to GCC's mitigation); it hasn't
landed yet but we're close to consensus and I expect it to land
imminently.
https://reviews.llvm.org/D147975
Remember this thread? (Pepperidge farms remembers...)
https://lore.kernel.org/all/20200314164451.346497-1-slyfox@gentoo.org/
That reminded me that years ago we discussed a function attribute for
no_stack_protector.
https://lore.kernel.org/all/20200316130414.GC12561@hirez.programming.kicks-ass.net/
GCC didn't have one at the time, it now does. In addition to the LLVM
fix, I'd like to introduce this in the kernel so that we might start
using it in additional places:
* https://lore.kernel.org/linux-pm/20200915172658.1432732-1-rkir@google.com/
* https://lore.kernel.org/lkml/20200918201436.2932360-30-samitolvanen@google.com/
And eventually remove the final macro expansion site of
prevent_tail_call_optimization.
With the LLVM fix, this series isn't required, but I'd like to start
paving the way to use these function attributes since I think they are a
sweet spot in terms of granularity (as opposed to trying to move
start_kernel to its own TU compiled with -fno-stack-protector).
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
Changes in v2:
- Rebase to avoid conflicts with Josh's changes.
- Fix comment style as per Peter.
- Pick up tags.
- Link to v1: https://lore.kernel.org/r/20230412-no_stackp-v1-0-46a69b507a4b@google.com
(sorry for the spam with v2, mrincon is helping me get kinks worked out
with b4 and our corporate mailer)
---
Nick Desaulniers (2):
start_kernel: add no_stack_protector fn attr
start_kernel: omit prevent_tail_call_optimization for newer toolchains
arch/powerpc/kernel/smp.c | 1 +
include/linux/compiler_attributes.h | 12 ++++++++++++
init/main.c | 9 ++++++++-
3 files changed, 21 insertions(+), 1 deletion(-)
---
base-commit: 88b478ee5c7b080b70c68d6e9b3da6c2b518ceb0
change-id: 20230412-no_stackp-a98168a2bb0a
Best regards,
--
Nick Desaulniers <ndesaulniers@google.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr
2023-04-17 22:00 [PATCH v2 0/2] start_kernel: omit stack canary ndesaulniers
@ 2023-04-17 22:00 ` ndesaulniers
2023-05-18 11:08 ` [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute tip-bot2 for ndesaulniers@google.com
2023-04-17 22:00 ` [PATCH v2 2/2] start_kernel: omit prevent_tail_call_optimization for newer toolchains ndesaulniers
2023-04-18 21:38 ` [PATCH v2 0/2] start_kernel: omit stack canary Josh Poimboeuf
2 siblings, 1 reply; 9+ messages in thread
From: ndesaulniers @ 2023-04-17 22:00 UTC (permalink / raw)
To: Borislav Petkov (AMD)
Cc: Peter Zijlstra, Josh Poimboeuf, x86, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Miguel Ojeda,
Nathan Chancellor, Tom Rix, linuxppc-dev, linux-kernel, llvm,
Nick Desaulniers
Back during the discussion of
commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
we discussed the need for a function attribute to control the omission
of stack protectors on a per-function basis; at the time Clang had
support for no_stack_protector but GCC did not. This was fixed in
gcc-11. Now that the function attribute is available, let's start using
it.
Callers of boot_init_stack_canary need to use this function attribute
unless they're compiled with -fno-stack-protector, otherwise the canary
stored in the stack slot of the caller will differ upon the call to
boot_init_stack_canary. This will lead to a call to __stack_chk_fail
then panic.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94722
Link: https://lore.kernel.org/all/20200316130414.GC12561@hirez.programming.kicks-ass.net/
Tested-by: Nathan Chancellor <nathan@kernel.org>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
arch/powerpc/kernel/smp.c | 1 +
include/linux/compiler_attributes.h | 12 ++++++++++++
init/main.c | 3 ++-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index f62e5e651bcd..48acae0da034 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1603,6 +1603,7 @@ static void add_cpu_to_masks(int cpu)
}
/* Activate a secondary processor. */
+__no_stack_protector
void start_secondary(void *unused)
{
unsigned int cpu = raw_smp_processor_id();
diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
index e659cb6fded3..84864767a56a 100644
--- a/include/linux/compiler_attributes.h
+++ b/include/linux/compiler_attributes.h
@@ -255,6 +255,18 @@
*/
#define __noreturn __attribute__((__noreturn__))
+/*
+ * Optional: only supported since GCC >= 11.1, clang >= 7.0.
+ *
+ * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
+ * clang: https://clang.llvm.org/docs/AttributeReference.html#no-stack-protector-safebuffers
+ */
+#if __has_attribute(__no_stack_protector__)
+# define __no_stack_protector __attribute__((__no_stack_protector__))
+#else
+# define __no_stack_protector
+#endif
+
/*
* Optional: not supported by gcc.
*
diff --git a/init/main.c b/init/main.c
index 5d6365510173..1265c8d11052 100644
--- a/init/main.c
+++ b/init/main.c
@@ -941,7 +941,8 @@ static void __init print_unknown_bootoptions(void)
memblock_free(unknown_options, len);
}
-asmlinkage __visible void __init __no_sanitize_address __noreturn start_kernel(void)
+asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector
+void start_kernel(void)
{
char *command_line;
char *after_dashes;
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/2] start_kernel: omit prevent_tail_call_optimization for newer toolchains
2023-04-17 22:00 [PATCH v2 0/2] start_kernel: omit stack canary ndesaulniers
2023-04-17 22:00 ` [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr ndesaulniers
@ 2023-04-17 22:00 ` ndesaulniers
2023-05-18 11:08 ` [tip: objtool/core] start_kernel: Omit prevent_tail_call_optimization() " tip-bot2 for ndesaulniers@google.com
2023-04-18 21:38 ` [PATCH v2 0/2] start_kernel: omit stack canary Josh Poimboeuf
2 siblings, 1 reply; 9+ messages in thread
From: ndesaulniers @ 2023-04-17 22:00 UTC (permalink / raw)
To: Borislav Petkov (AMD)
Cc: Peter Zijlstra, Josh Poimboeuf, x86, Michael Ellerman,
Nicholas Piggin, Christophe Leroy, Miguel Ojeda,
Nathan Chancellor, Tom Rix, linuxppc-dev, linux-kernel, llvm,
Nick Desaulniers
prevent_tail_call_optimization was added in
commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
to work around stack canaries getting inserted into functions that would
initialize the stack canary in the first place.
Now that we have no_stack_protector function attribute (gcc-11+,
clang-7+) and use it on start_kernel, remove the call to
prevent_tail_call_optimization such that we may one day remove it
outright.
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
init/main.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/init/main.c b/init/main.c
index 1265c8d11052..c6eef497c8c9 100644
--- a/init/main.c
+++ b/init/main.c
@@ -1152,7 +1152,13 @@ void start_kernel(void)
/* Do the rest non-__init'ed, we're now alive */
arch_call_rest_init();
+ /*
+ * Avoid stack canaries in callers of boot_init_stack_canary for gcc-10
+ * and older.
+ */
+#if !__has_attribute(__no_stack_protector__)
prevent_tail_call_optimization();
+#endif
}
/* Call all constructor functions linked into the kernel. */
--
2.40.0.634.g4ca3ef3211-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/2] start_kernel: omit stack canary
2023-04-17 22:00 [PATCH v2 0/2] start_kernel: omit stack canary ndesaulniers
2023-04-17 22:00 ` [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr ndesaulniers
2023-04-17 22:00 ` [PATCH v2 2/2] start_kernel: omit prevent_tail_call_optimization for newer toolchains ndesaulniers
@ 2023-04-18 21:38 ` Josh Poimboeuf
2 siblings, 0 replies; 9+ messages in thread
From: Josh Poimboeuf @ 2023-04-18 21:38 UTC (permalink / raw)
To: ndesaulniers
Cc: Borislav Petkov (AMD), llvm, Peter Zijlstra, x86, linux-kernel,
Nathan Chancellor, Nicholas Piggin, Tom Rix, Miguel Ojeda,
linuxppc-dev
On Mon, Apr 17, 2023 at 03:00:04PM -0700, ndesaulniers@google.com wrote:
> ---
> Changes in v2:
> - Rebase to avoid conflicts with Josh's changes.
> - Fix comment style as per Peter.
> - Pick up tags.
> - Link to v1: https://lore.kernel.org/r/20230412-no_stackp-v1-0-46a69b507a4b@google.com
> (sorry for the spam with v2, mrincon is helping me get kinks worked out
> with b4 and our corporate mailer)
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
--
Josh
^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip: objtool/core] start_kernel: Omit prevent_tail_call_optimization() for newer toolchains
2023-04-17 22:00 ` [PATCH v2 2/2] start_kernel: omit prevent_tail_call_optimization for newer toolchains ndesaulniers
@ 2023-05-18 11:08 ` tip-bot2 for ndesaulniers@google.com
0 siblings, 0 replies; 9+ messages in thread
From: tip-bot2 for ndesaulniers@google.com @ 2023-05-18 11:08 UTC (permalink / raw)
To: linux-tip-commits
Cc: Nathan Chancellor, Peter Zijlstra (Intel), Nick Desaulniers,
Josh Poimboeuf, x86, linux-kernel
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: dc1d05536f44cee16e46e86316e6718b2c0d8872
Gitweb: https://git.kernel.org/tip/dc1d05536f44cee16e46e86316e6718b2c0d8872
Author: ndesaulniers@google.com <ndesaulniers@google.com>
AuthorDate: Mon, 17 Apr 2023 15:00:06 -07:00
Committer: Josh Poimboeuf <jpoimboe@kernel.org>
CommitterDate: Tue, 16 May 2023 06:28:24 -07:00
start_kernel: Omit prevent_tail_call_optimization() for newer toolchains
prevent_tail_call_optimization() was added in
commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
to work around stack canaries getting inserted into functions that would
initialize the stack canary in the first place.
Now that we have no_stack_protector function attribute (gcc-11+,
clang-7+) and use it on start_kernel(), remove the call to
prevent_tail_call_optimization() such that we may one day remove it
outright.
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Link: https://lore.kernel.org/r/20230412-no_stackp-v2-2-116f9fe4bbe7@google.com
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
init/main.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/init/main.c b/init/main.c
index c445c1f..c0b6499 100644
--- a/init/main.c
+++ b/init/main.c
@@ -1088,7 +1088,13 @@ void start_kernel(void)
/* Do the rest non-__init'ed, we're now alive */
arch_call_rest_init();
+ /*
+ * Avoid stack canaries in callers of boot_init_stack_canary for gcc-10
+ * and older.
+ */
+#if !__has_attribute(__no_stack_protector__)
prevent_tail_call_optimization();
+#endif
}
/* Call all constructor functions linked into the kernel. */
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute
2023-04-17 22:00 ` [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr ndesaulniers
@ 2023-05-18 11:08 ` tip-bot2 for ndesaulniers@google.com
2023-05-19 17:11 ` David Vernet
0 siblings, 1 reply; 9+ messages in thread
From: tip-bot2 for ndesaulniers@google.com @ 2023-05-18 11:08 UTC (permalink / raw)
To: linux-tip-commits
Cc: Nathan Chancellor, Michael Ellerman, Miguel Ojeda,
Peter Zijlstra (Intel), Nick Desaulniers, Josh Poimboeuf, x86,
linux-kernel
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: 514ca14ed5444b911de59ed3381dfd195d99fe4b
Gitweb: https://git.kernel.org/tip/514ca14ed5444b911de59ed3381dfd195d99fe4b
Author: ndesaulniers@google.com <ndesaulniers@google.com>
AuthorDate: Mon, 17 Apr 2023 15:00:05 -07:00
Committer: Josh Poimboeuf <jpoimboe@kernel.org>
CommitterDate: Tue, 16 May 2023 06:28:15 -07:00
start_kernel: Add __no_stack_protector function attribute
Back during the discussion of
commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
we discussed the need for a function attribute to control the omission
of stack protectors on a per-function basis; at the time Clang had
support for no_stack_protector but GCC did not. This was fixed in
gcc-11. Now that the function attribute is available, let's start using
it.
Callers of boot_init_stack_canary need to use this function attribute
unless they're compiled with -fno-stack-protector, otherwise the canary
stored in the stack slot of the caller will differ upon the call to
boot_init_stack_canary. This will lead to a call to __stack_chk_fail()
then panic.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94722
Link: https://lore.kernel.org/all/20200316130414.GC12561@hirez.programming.kicks-ass.net/
Tested-by: Nathan Chancellor <nathan@kernel.org>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Link: https://lore.kernel.org/r/20230412-no_stackp-v2-1-116f9fe4bbe7@google.com
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: ndesaulniers@google.com <ndesaulniers@google.com>
---
arch/powerpc/kernel/smp.c | 1 +
include/linux/compiler_attributes.h | 12 ++++++++++++
init/main.c | 3 ++-
3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 265801a..6903a72 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1605,6 +1605,7 @@ static void add_cpu_to_masks(int cpu)
}
/* Activate a secondary processor. */
+__no_stack_protector
void start_secondary(void *unused)
{
unsigned int cpu = raw_smp_processor_id();
diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
index e659cb6..8486476 100644
--- a/include/linux/compiler_attributes.h
+++ b/include/linux/compiler_attributes.h
@@ -256,6 +256,18 @@
#define __noreturn __attribute__((__noreturn__))
/*
+ * Optional: only supported since GCC >= 11.1, clang >= 7.0.
+ *
+ * gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute
+ * clang: https://clang.llvm.org/docs/AttributeReference.html#no-stack-protector-safebuffers
+ */
+#if __has_attribute(__no_stack_protector__)
+# define __no_stack_protector __attribute__((__no_stack_protector__))
+#else
+# define __no_stack_protector
+#endif
+
+/*
* Optional: not supported by gcc.
*
* clang: https://clang.llvm.org/docs/AttributeReference.html#overloadable
diff --git a/init/main.c b/init/main.c
index af50044..c445c1f 100644
--- a/init/main.c
+++ b/init/main.c
@@ -877,7 +877,8 @@ static void __init print_unknown_bootoptions(void)
memblock_free(unknown_options, len);
}
-asmlinkage __visible void __init __no_sanitize_address __noreturn start_kernel(void)
+asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector
+void start_kernel(void)
{
char *command_line;
char *after_dashes;
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute
2023-05-18 11:08 ` [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute tip-bot2 for ndesaulniers@google.com
@ 2023-05-19 17:11 ` David Vernet
2023-05-19 17:18 ` Nick Desaulniers
0 siblings, 1 reply; 9+ messages in thread
From: David Vernet @ 2023-05-19 17:11 UTC (permalink / raw)
To: linux-kernel
Cc: linux-tip-commits, Nathan Chancellor, Michael Ellerman,
Miguel Ojeda, Peter Zijlstra (Intel), Nick Desaulniers,
Josh Poimboeuf, x86, Linus Torvalds
On Thu, May 18, 2023 at 11:08:03AM -0000, tip-bot2 for ndesaulniers@google.com wrote:
> The following commit has been merged into the objtool/core branch of tip:
>
> Commit-ID: 514ca14ed5444b911de59ed3381dfd195d99fe4b
> Gitweb: https://git.kernel.org/tip/514ca14ed5444b911de59ed3381dfd195d99fe4b
> Author: ndesaulniers@google.com <ndesaulniers@google.com>
> AuthorDate: Mon, 17 Apr 2023 15:00:05 -07:00
> Committer: Josh Poimboeuf <jpoimboe@kernel.org>
Hi Nick, Josh, Peter,
Do you have an ETA for when this will make its way to Linus' tree?
clang-17 built kernels have failed to boot since [0], so it would be
nice to get this in sooner rather than later if possible.
[0]: https://lore.kernel.org/all/7194ed8a989a85b98d92e62df660f4a90435a723.1681342859.git.jpoimboe@kernel.org/
Thanks,
David
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute
2023-05-19 17:11 ` David Vernet
@ 2023-05-19 17:18 ` Nick Desaulniers
2023-05-19 17:42 ` David Vernet
0 siblings, 1 reply; 9+ messages in thread
From: Nick Desaulniers @ 2023-05-19 17:18 UTC (permalink / raw)
To: void
Cc: linux-kernel, linux-tip-commits, Nathan Chancellor,
Michael Ellerman, Miguel Ojeda, Peter Zijlstra (Intel),
Josh Poimboeuf, x86, Linus Torvalds, clang-built-linux
On Fri, May 19, 2023 at 10:11 AM David Vernet <void@manifault.com> wrote:
>
> On Thu, May 18, 2023 at 11:08:03AM -0000, tip-bot2 for ndesaulniers@google.com wrote:
> > The following commit has been merged into the objtool/core branch of tip:
> >
> > Commit-ID: 514ca14ed5444b911de59ed3381dfd195d99fe4b
> > Gitweb: https://git.kernel.org/tip/514ca14ed5444b911de59ed3381dfd195d99fe4b
> > Author: ndesaulniers@google.com <ndesaulniers@google.com>
> > AuthorDate: Mon, 17 Apr 2023 15:00:05 -07:00
> > Committer: Josh Poimboeuf <jpoimboe@kernel.org>
>
> Hi Nick, Josh, Peter,
>
> Do you have an ETA for when this will make its way to Linus' tree?
> clang-17 built kernels have failed to boot since [0], so it would be
> nice to get this in sooner rather than later if possible.
David,
Can you confirm that your version of clang-17 is updated? clang-17 is
unreleased; ToT will become clang-17.
https://reviews.llvm.org/rGfc4494dffa5422b2be5442c235554e76bed79c8a
should have fixed any boot failures related to stack protectors. That
is to say that Josh's series is irrelevant to anyone using either an
existing release of clang, or something closer to ToT than April 13.
LLVM commit fc4494dffa54 ("[StackProtector] don't check stack
protector before calling nounwind functions")
landed April 13, so please check that your build of clang-17 is after that date.
Either way, thanks for testing with clang, and the report. You can
always file a bug at our issue tracker:
https://github.com/ClangBuiltLinux/linux/issues or see our page for
more ways to get in touch:
https://clangbuiltlinux.github.io/
We're very active on our mailing list, and on IRC.
>
> [0]: https://lore.kernel.org/all/7194ed8a989a85b98d92e62df660f4a90435a723.1681342859.git.jpoimboe@kernel.org/
>
> Thanks,
> David
--
Thanks,
~Nick Desaulniers
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute
2023-05-19 17:18 ` Nick Desaulniers
@ 2023-05-19 17:42 ` David Vernet
0 siblings, 0 replies; 9+ messages in thread
From: David Vernet @ 2023-05-19 17:42 UTC (permalink / raw)
To: Nick Desaulniers
Cc: linux-kernel, linux-tip-commits, Nathan Chancellor,
Michael Ellerman, Miguel Ojeda, Peter Zijlstra (Intel),
Josh Poimboeuf, x86, Linus Torvalds, clang-built-linux
On Fri, May 19, 2023 at 10:18:40AM -0700, Nick Desaulniers wrote:
> On Fri, May 19, 2023 at 10:11 AM David Vernet <void@manifault.com> wrote:
> >
> > On Thu, May 18, 2023 at 11:08:03AM -0000, tip-bot2 for ndesaulniers@google.com wrote:
> > > The following commit has been merged into the objtool/core branch of tip:
> > >
> > > Commit-ID: 514ca14ed5444b911de59ed3381dfd195d99fe4b
> > > Gitweb: https://git.kernel.org/tip/514ca14ed5444b911de59ed3381dfd195d99fe4b
> > > Author: ndesaulniers@google.com <ndesaulniers@google.com>
> > > AuthorDate: Mon, 17 Apr 2023 15:00:05 -07:00
> > > Committer: Josh Poimboeuf <jpoimboe@kernel.org>
> >
> > Hi Nick, Josh, Peter,
> >
> > Do you have an ETA for when this will make its way to Linus' tree?
> > clang-17 built kernels have failed to boot since [0], so it would be
> > nice to get this in sooner rather than later if possible.
>
> David,
> Can you confirm that your version of clang-17 is updated? clang-17 is
> unreleased; ToT will become clang-17.
>
> https://reviews.llvm.org/rGfc4494dffa5422b2be5442c235554e76bed79c8a
> should have fixed any boot failures related to stack protectors. That
> is to say that Josh's series is irrelevant to anyone using either an
> existing release of clang, or something closer to ToT than April 13.
Thanks for the quick reply, Nick. The latest clang-17 does indeed fix
the issue. Apologies for not trying that first -- I was using the only
tagged verson of clang-17 (which admittedly is not a released version),
and figured it wasn't a compiler bug given that the assembly looked
sane, compilers are allowed to do all sorts of interesting things with
__noreturn, and that [1] removes -fstack-protector from start_kernel()
altogether.
[1]: https://lore.kernel.org/lkml/20230412-no_stackp-v1-1-46a69b507a4b@google.com/
> LLVM commit fc4494dffa54 ("[StackProtector] don't check stack
> protector before calling nounwind functions")
> landed April 13, so please check that your build of clang-17 is after that date.
>
> Either way, thanks for testing with clang, and the report. You can
> always file a bug at our issue tracker:
> https://github.com/ClangBuiltLinux/linux/issues or see our page for
> more ways to get in touch:
> https://clangbuiltlinux.github.io/
> We're very active on our mailing list, and on IRC.
Ack, thanks for letting me know for next time.
- David
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-05-19 17:42 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-17 22:00 [PATCH v2 0/2] start_kernel: omit stack canary ndesaulniers
2023-04-17 22:00 ` [PATCH v2 1/2] start_kernel: add no_stack_protector fn attr ndesaulniers
2023-05-18 11:08 ` [tip: objtool/core] start_kernel: Add __no_stack_protector function attribute tip-bot2 for ndesaulniers@google.com
2023-05-19 17:11 ` David Vernet
2023-05-19 17:18 ` Nick Desaulniers
2023-05-19 17:42 ` David Vernet
2023-04-17 22:00 ` [PATCH v2 2/2] start_kernel: omit prevent_tail_call_optimization for newer toolchains ndesaulniers
2023-05-18 11:08 ` [tip: objtool/core] start_kernel: Omit prevent_tail_call_optimization() " tip-bot2 for ndesaulniers@google.com
2023-04-18 21:38 ` [PATCH v2 0/2] start_kernel: omit stack canary Josh Poimboeuf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox