freebsd-dev/lib
Mark Johnston 7eb138a9e5 libc/locale: Fix races between localeconv(3) and setlocale(3)
Each locale embeds a lazily initialized lconv which is populated by
localeconv(3) and localeconv_l(3).  When setlocale(3) updates the global
locale, the lconv needs to be (lazily) reinitialized.  To signal this,
we set flag variables in the locale structure.  There are two problems:

- The flags are set before the locale is fully updated, so a concurrent
  localeconv() call can observe partially initialized locale data.
- No barriers ensure that localeconv() observes a fully initialized
  locale if a flag is set.

So, move the flag update appropriately, and use acq/rel barriers to
provide some synchronization.  Note that this is inadequate in the face
of multiple concurrent calls to setlocale(3), but this is not expected
to work regardless.

Thanks to Henry Hu <henry.hu.sh@gmail.com> for providing a test case
demonstrating the race.

PR:		258360
MFC after:	3 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D31899
2021-09-17 10:47:46 -04:00
..
atf Import atf 0.22 snapshot ca73d08c3fc1ecffc1f1c97458c31ab82c12bb01 2021-02-04 15:03:05 +00:00
clang Add WITH_LLVM_BINUTILS to install LLVM binutils instead of Elftoolchain 2021-09-06 09:49:49 +01:00
csu Add arm64 ifunc support in static binaries 2021-08-23 13:39:09 +00:00
flua lib/flua/libjail: Allow empty params table 2021-03-02 18:32:22 -05:00
geom geli(8): Do not report error on resize to the same size. 2021-08-18 17:11:03 -04:00
googletest googletest: Silence warnings about deprecated implicit copy constructors 2021-08-26 22:06:53 +02:00
lib9p lib9p: fix building on systems without capser 2021-01-04 20:48:48 +01:00
lib80211 lib80211: Start adding 11ac ETSI bits to regdomain.xml 2021-03-18 11:09:10 +00:00
libalias Rename NO_WERROR -> MK_WERROR=no 2021-01-07 09:31:03 +00:00
libarchive libarchive: import changes from upstream 2021-08-23 03:07:36 +02:00
libauditd
libbe zfs: unbreak build broken in 160388166 2021-06-08 22:21:11 +02:00
libbearssl
libbegemot
libblacklist
libblocksruntime
libbluetooth
libbsdstat
libbsm
libbsnmp pkgbase: Put the mibs and defs in the bnsmp package 2021-06-19 17:50:03 +02:00
libbz2
libc libc/locale: Fix races between localeconv(3) and setlocale(3) 2021-09-17 10:47:46 -04:00
libc_nonshared
libc++ Merge llvm-project 12.0.0 release 2021-06-13 22:01:15 +02:00
libc++experimental
libcalendar
libcam libcam(3): make cam_getccb(3) zero the whole ccb, not just the header 2020-12-29 14:26:06 +00:00
libcapsicum Add missing FreeBSD functions to -legacy when building on macOS/Linux 2020-08-25 13:23:31 +00:00
libcasper libcasper(3): Correct some warnings found by mandoc 2021-07-12 06:16:55 +02:00
libclang_rt Prefer MK_SSP=no to SSP_CFLAGS= 2021-08-04 15:23:22 -03:00
libcom_err pkgbase: Create a FreeBSD-kerberos package 2021-09-07 10:23:14 +02:00
libcompat
libcompiler_rt compiler-rt: add aarch64 init function for LSE atomics 2021-09-06 21:24:01 +02:00
libcrypt Do a sweep and remove most WARNS=6 settings 2020-10-01 01:10:51 +00:00
libcuse
libcxxrt Only set WARNS if not defined 2020-09-11 13:28:37 +00:00
libdevctl
libdevdctl Fix race in case of device destruction. 2021-04-13 11:25:27 -04:00
libdevinfo devinfo: add man page links 2020-08-04 21:09:36 +00:00
libdevstat
libdl libc: include rtld.h into static implementations of rtld interface 2021-04-09 23:46:24 +03:00
libdpv Bump shared library versions after ncurses bump in 13. 2021-02-01 17:11:49 -08:00
libdwarf
libedit sh(1): autocomplete commands 2021-03-29 11:14:27 +02:00
libefivar pkgbase: Remove libefivar package and add a efi-tools one 2021-09-07 10:24:21 +02:00
libelf libelf: add compression header support 2020-10-23 16:35:23 +00:00
libelftc
libevent1
libexecinfo
libexpat pkgbase: Put libbsdxml in FreeBSD-runtime 2021-09-07 10:22:45 +02:00
libfetch fetch: do not confuse capacity and length 2021-09-09 16:51:26 +02:00
libfigpar
libgcc_eh Add build system support for ASAN+UBSAN instrumentation 2021-08-02 14:33:24 +01:00
libgcc_s Add build system support for ASAN+UBSAN instrumentation 2021-08-02 14:33:24 +01:00
libgeom [skip ci] correct a few SPDX license tags 2021-07-07 13:52:20 -06:00
libgpio
libgssapi Remove __NO_TLS. 2021-02-23 20:08:10 +02:00
libiconv_modules Do a sweep and remove most WARNS=6 settings 2020-10-01 01:10:51 +00:00
libifconfig libifconfig: Overhaul ifconfig_media_* interfaces 2021-03-05 04:15:55 -05:00
libipsec ipsec_set_policy(3): fix sentence 2021-08-10 03:46:35 +03:00
libipt
libjail
libkiconv libkiconv: address memory leak in not-found cases 2021-04-22 19:32:34 -04:00
libkvm libkvm: Fix build after removeal of p_tracevp 2021-05-22 16:36:54 +03:00
libldns
liblua contrib/lua: update to 5.4.2 2021-01-13 23:56:18 -06:00
liblutok
liblzma Convert libs with pc files to use PCFILES 2021-03-16 07:13:07 +01:00
libmagic Convert libs with pc files to use PCFILES 2021-03-16 07:13:07 +01:00
libmd Revert "Disable the accelerated arm64 sha25 in static libraries" 2021-08-30 10:36:43 +01:00
libmemstat malloc: move malloc_type_internal into malloc_type 2020-11-06 21:33:59 +00:00
libmilter
libmp
libmt Add the LTO-9 density code to libmt and the mt(1) man page. 2020-12-10 21:06:06 +00:00
libnetbsd
libnetgraph
libnetmap libnetmap: reset errno in nmreq_register_decode() 2021-04-02 14:31:57 +00:00
libngatm
libnv libpfct: Fix PIC flag 2021-04-17 22:10:13 +02:00
libomp Merge llvm-project 12.0.0 release 2021-06-13 22:01:15 +02:00
libopenbsd Only set WARNS if not defined 2020-09-11 13:28:37 +00:00
libopencsd
libopie
libpam openssh: update to OpenSSH v8.7p1 2021-09-07 21:05:51 -04:00
libpathconv Fix a few mandoc issues 2020-10-09 19:12:44 +00:00
libpcap
libpe
libpfctl libpfctl: Implement DIOCGETSTATUS wrappers 2021-08-29 14:59:38 +02:00
libpjdlog
libpmc pmc(3): remove Pentium-related man pages and references 2021-08-10 17:19:58 -03:00
libpmcstat pmcstat: fix PPC kernel symbol resolution 2020-11-05 16:47:23 +00:00
libproc Remove the MK_LIBCPLUSPLUS option 2021-02-01 09:32:07 +00:00
libprocstat libprocstat: extend zfs_defs hack for .pieo 2021-09-13 09:03:55 -04:00
libradius libradius: fix no SSL build 2021-06-02 17:25:37 -07:00
libregex pkgbase: Remove FreeBSD-libregex package 2021-09-07 10:23:53 +02:00
librpcsec_gss Fix a few mandoc issues 2020-10-09 19:12:44 +00:00
librpcsvc
librss
librt Fix aio_readv(2), aio_writev(2) with SIGEV_THREAD. 2021-08-22 23:49:23 +12:00
librtld_db
libsbuf Do a sweep and remove most WARNS=6 settings 2020-10-01 01:10:51 +00:00
libsdp
libsecureboot libsecureboot: define SOPEN_MAX 2021-08-10 22:46:40 +03:00
libsm
libsmb
libsmdb
libsmutil
libsqlite3 [PowerPC64LE] Pass our byte order to the sqlite3 build. 2020-09-23 02:17:44 +00:00
libssp
libssp_nonshared
libstats
libstdbuf
libstdthreads
libsysdecode Remove PT_GET_SC_ARGS_ALL 2021-09-16 20:11:27 +03:00
libtacplus
libtelnet
libthr libthr: work around an ASAN false-positive 2021-08-02 14:33:24 +01:00
libthread_db
libucl Only set WARNS if not defined 2020-09-11 13:28:37 +00:00
libufs Remove #define _KERNEL hacks from libprocstat 2021-02-21 11:38:21 +02:00
libugidfw
libulog
libunbound
libusb Improve handling of USB device re-open in the LibUSB v1.x API. 2021-06-11 17:06:44 +02:00
libusbhid
libutil setclassenvironment: trim leading spaces in variable names 2021-04-12 01:05:10 +03:00
libveriexec
libvgl
libvmmapi Remove an always-true check. 2021-09-15 09:03:17 -07:00
libwrap
libxo add blank line between variables (testing git commit) 2021-08-04 16:56:55 -04:00
liby
libypclnt
libz Convert libs with pc files to use PCFILES 2021-03-16 07:13:07 +01:00
libzstd libprivatezstd: Restrict symbol visibility similar to upstream 2021-01-03 11:26:46 -08:00
msun Fix powf(). 2021-09-06 18:51:31 +01:00
ncurses expand @TPUT@ in ncurses manpages 2021-04-14 18:16:59 +03:00
ofed Fix ibnd_* manpages sources 2021-02-18 15:59:34 +01:00
tests
Makefile Add WITH_LLVM_BINUTILS to install LLVM binutils instead of Elftoolchain 2021-09-06 09:49:49 +01:00
Makefile.inc build: provide a default WARNS for all in-tree builds 2020-09-18 17:17:46 +00:00