[PATCH v2] aarch64: Fix error messages for GCS and BTI incompatible modules
Andreas K. Huettel
dilfridge@gentoo.org
Sat Jan 10 14:10:25 GMT 2026
Am Dienstag, 6. Januar 2026, 15:53:03 Mitteleuropäische Normalzeit schrieb Adhemerval Zanella Netto:
>
> On 06/01/26 08:17, Yury Khrustalev wrote:
> > When either program path of module name is empty, don't print an
> > empty string followed by a colon.
> >
> > Also fix-up test for a static BTI binary to check error message
> > for this case.
>
> LGTM, thanks.
>
> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> PS: CCing Andreas to give the final ack to install it.
OK
>
> > ---
> > sysdeps/aarch64/Makefile | 1 +
> > sysdeps/aarch64/dl-bti.c | 20 +++++++++++++++-----
> > sysdeps/aarch64/dl-gcs.c | 19 ++++++++++++++-----
> > sysdeps/aarch64/tst-bti-abort-static.c | 4 ++++
> > 4 files changed, 34 insertions(+), 10 deletions(-)
> >
> > diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile
> > index b939bcfc11..ee3981e3f6 100644
> > --- a/sysdeps/aarch64/Makefile
> > +++ b/sysdeps/aarch64/Makefile
> > @@ -90,6 +90,7 @@ ifeq (yes,$(have-test-bti))
> >
> > tests += \
> > tst-bti-abort-imm \
> > + tst-bti-abort-static \
> > tst-bti-abort-transitive \
> > tst-bti-abort-unprot \
> > tst-bti-dep-prot \
> > diff --git a/sysdeps/aarch64/dl-bti.c b/sysdeps/aarch64/dl-bti.c
> > index 5d743e775f..1301ce2e73 100644
> > --- a/sysdeps/aarch64/dl-bti.c
> > +++ b/sysdeps/aarch64/dl-bti.c
> > @@ -66,13 +66,23 @@ _dl_bti_protect (struct link_map *map, int fd)
> > static void
> > bti_failed (struct link_map *l, const char *program)
> > {
> > - if (program)
> > - _dl_fatal_printf ("%s: %s: failed to turn on BTI protection\n",
> > - program, l->l_name);
> > + if (program != NULL)
> > + {
> > + if (program[0] != '\0' && l->l_name[0] != '\0')
> > + /* A program's dependency is not BTI compatible. */
> > + _dl_fatal_printf ("%s: %s: failed to turn on BTI protection\n",
> > + program, l->l_name);
> > + if (program[0] != '\0')
> > + /* The program itself is not BTI compatible. */
> > + _dl_fatal_printf ("%s: failed to turn on BTI protection\n", program);
> > + /* For static binaries, program will be an empty string. */
> > + _dl_fatal_printf ("error: failed to turn on BTI protection\n");
> > + }
> > else
> > - /* Note: the errno value is not available any more. */
> > + /* If program is NULL, we are processing a dlopen operation.
> > + Note: the errno value is not available any more. */
> > _dl_signal_error (0, l->l_name, "dlopen",
> > - N_("failed to turn on BTI protection"));
> > + "failed to turn on BTI protection");
> > }
> >
> >
> > diff --git a/sysdeps/aarch64/dl-gcs.c b/sysdeps/aarch64/dl-gcs.c
> > index 7a80e14933..1c6944562d 100644
> > --- a/sysdeps/aarch64/dl-gcs.c
> > +++ b/sysdeps/aarch64/dl-gcs.c
> > @@ -33,18 +33,27 @@
> > static void
> > fail (struct link_map *l, const char *program)
> > {
> > - if (program && program[0])
> > - _dl_fatal_printf ("%s: %s: %s\n", program, l->l_name, "not GCS compatible");
> > - else if (program)
> > - _dl_fatal_printf ("%s\n", "not GCS compatible");
> > + if (program != NULL)
> > + {
> > + if (program[0] != '\0' && l->l_name[0] != '\0')
> > + /* A program's dependency is not GCS compatible. */
> > + _dl_fatal_printf ("%s: %s: not GCS compatible\n", program, l->l_name);
> > + if (program[0] != '\0')
> > + /* The program itself is not GCS compatible. */
> > + _dl_fatal_printf ("%s: not GCS compatible\n", program);
> > + /* For static binaries, program will be an empty string. */
> > + _dl_fatal_printf ("error: not GCS compatible\n");
> > + }
> > else
> > + /* If program is NULL, we are processing a dlopen operation.
> > + Note: the errno value is not available any more. */
> > _dl_signal_error (0, l->l_name, "dlopen", "not GCS compatible");
> > }
> >
> > static void
> > unsupported (void)
> > {
> > - _dl_fatal_printf ("%s\n", "unsupported GCS policy");
> > + _dl_fatal_printf ("unsupported GCS policy\n");
> > }
> >
> > /* This function is called only when binary markings are not
> > diff --git a/sysdeps/aarch64/tst-bti-abort-static.c b/sysdeps/aarch64/tst-bti-abort-static.c
> > index 83871b1fdb..6385e41c65 100644
> > --- a/sysdeps/aarch64/tst-bti-abort-static.c
> > +++ b/sysdeps/aarch64/tst-bti-abort-static.c
> > @@ -22,6 +22,7 @@
> > #include <stddef.h>
> > #include <stdint.h>
> > #include <string.h>
> > +#include <sys/auxv.h>
> >
> > #include <support/check.h>
> > #include <support/support.h>
> > @@ -30,6 +31,9 @@
> > static int
> > do_test (void)
> > {
> > + unsigned long hwcap2 = getauxval (AT_HWCAP2);
> > + if ((hwcap2 & HWCAP2_BTI) == 0)
> > + FAIL_UNSUPPORTED ("BTI is not supported by this system");
> > return 0;
> > }
> >
>
>
--
Andreas K. Hüttel
dilfridge@gentoo.org
Gentoo Linux developer
(council, comrel, toolchain, base-system, perl, libreoffice)
https://wiki.gentoo.org/wiki/User:Dilfridge
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 870 bytes
Desc: This is a digitally signed message part.
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20260110/49bf9585/attachment.sig>
More information about the Libc-alpha
mailing list