From 2f4cbf459d4af41977be30eab2f6f7d7e9f9b5b5 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 21 Feb 2024 16:12:12 +0200 Subject: [PATCH] libsys auxv.c: add fences needed to ensure that flag works Noted by: jrtc27 Sponsored by: The FreeBSD Foundation --- lib/libsys/auxv.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/libsys/auxv.c b/lib/libsys/auxv.c index 88f49ef53be1..1a4fd352950e 100644 --- a/lib/libsys/auxv.c +++ b/lib/libsys/auxv.c @@ -36,6 +36,7 @@ #include #include "un-namespace.h" #include "libc_private.h" +#include extern int _DYNAMIC; #pragma weak _DYNAMIC @@ -66,7 +67,7 @@ __init_elf_aux_vector(void) } #endif -static bool aux_once = false; +static int aux_once; static int pagesize, osreldate, canary_len, ncpus, pagesizes_len, bsdflags; static int hwcap_present, hwcap2_present; static char *canary, *pagesizes, *execpath; @@ -92,7 +93,7 @@ init_aux(void) { Elf_Auxinfo *aux; - if (aux_once) + if (atomic_load_acq_int(&aux_once)) return; for (aux = __elf_aux_vector; aux->a_type != AT_NULL; aux++) { switch (aux->a_type) { @@ -179,7 +180,7 @@ init_aux(void) _init_aux_powerpc_fixup(); #endif - aux_once = true; + atomic_store_rel_int(&aux_once, 1); } #ifdef __powerpc__