git: 2f4cbf459d4a - main - libsys auxv.c: add fences needed to ensure that flag works

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 21 Feb 2024 14:19:01 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=2f4cbf459d4af41977be30eab2f6f7d7e9f9b5b5

commit 2f4cbf459d4af41977be30eab2f6f7d7e9f9b5b5
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-02-21 14:12:12 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-02-21 14:18:10 +0000

    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 <sys/auxv.h>
 #include "un-namespace.h"
 #include "libc_private.h"
+#include <machine/atomic.h>
 
 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__