From 4b3bf87eecba10805ce10bbd74ad04cf9fdaa629 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 6 Jan 2025 01:16:11 +0100 Subject: [PATCH] sigsegv tests: Work around a longjmp bug on GNU/Hurd. * tests/test-sigsegv-catch-stackoverflow1.c (_FORTIFY_SOURCE, __USE_FORTIFY_LEVEL): Undefine, as a workaround to the Hurd longjmp bug. * tests/test-sigsegv-catch-stackoverflow2.c (_FORTIFY_SOURCE, __USE_FORTIFY_LEVEL): Likewise. * doc/posix-functions/longjmp.texi: Document the Hurd bug. --- ChangeLog | 9 +++++++++ doc/posix-functions/longjmp.texi | 10 ++++++++-- tests/test-sigsegv-catch-stackoverflow1.c | 8 ++++++++ tests/test-sigsegv-catch-stackoverflow2.c | 8 ++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e03fccad1..f6f305de3b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2025-01-05 Bruno Haible + + sigsegv tests: Work around a longjmp bug on GNU/Hurd. + * tests/test-sigsegv-catch-stackoverflow1.c (_FORTIFY_SOURCE, + __USE_FORTIFY_LEVEL): Undefine, as a workaround to the Hurd longjmp bug. + * tests/test-sigsegv-catch-stackoverflow2.c (_FORTIFY_SOURCE, + __USE_FORTIFY_LEVEL): Likewise. + * doc/posix-functions/longjmp.texi: Document the Hurd bug. + 2025-01-05 Paul Eggert parse-datetime: pacify gcc 14 -Wformat-security diff --git a/doc/posix-functions/longjmp.texi b/doc/posix-functions/longjmp.texi index 057d0ab83f..b6163c9dc5 100644 --- a/doc/posix-functions/longjmp.texi +++ b/doc/posix-functions/longjmp.texi @@ -18,7 +18,13 @@ since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. @item When longjumping out of a signal handler that was being executed on an -alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD, -OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} +alternate stack (installed through @code{sigaltstack}), +on Hurd, FreeBSD, NetBSD, OpenBSD, +you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} structure managed by the kernel. +@item +This function may crash when the invoker code was compiled with option +@code{-D_FORTIFY_SOURCE=2}, +@c https://sourceware.org/bugzilla/show_bug.cgi?id=32522 +on Hurd. @end itemize diff --git a/tests/test-sigsegv-catch-stackoverflow1.c b/tests/test-sigsegv-catch-stackoverflow1.c index 093eb50e5f..cb20bceb8e 100644 --- a/tests/test-sigsegv-catch-stackoverflow1.c +++ b/tests/test-sigsegv-catch-stackoverflow1.c @@ -18,6 +18,14 @@ #include +/* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error + "*** longjmp causes uninitialized stack frame ***: terminated". + Cf. */ +#ifdef __GNU__ +# undef _FORTIFY_SOURCE +# undef __USE_FORTIFY_LEVEL +#endif + /* Specification. */ #include "sigsegv.h" diff --git a/tests/test-sigsegv-catch-stackoverflow2.c b/tests/test-sigsegv-catch-stackoverflow2.c index f88bfb4e39..34ea491740 100644 --- a/tests/test-sigsegv-catch-stackoverflow2.c +++ b/tests/test-sigsegv-catch-stackoverflow2.c @@ -18,6 +18,14 @@ #include +/* On GNU/Hurd, when compiling with -D_FORTIFY_SOURCE=2, avoid an error + "*** longjmp causes uninitialized stack frame ***: terminated". + Cf. */ +#ifdef __GNU__ +# undef _FORTIFY_SOURCE +# undef __USE_FORTIFY_LEVEL +#endif + /* Specification. */ #include "sigsegv.h" -- 2.39.5