libthr: allow very early atfork registration
LSan wants to be able to register atfork handlers at __lsan_init time,
which can happen either at the first intercepted function call or in a
.preinit_array function. Both of these end up being very early in rtld
and executed with the bind lock held, which ends up causing problems
when we go to _libpthread_init().
Instead of requiring libpthread to be initialized, just insert the new
atfork handler straight into the list if it's not ready yet. The
critical section and locking should not be necessary if we're really
executing this early, as there won't be any threads to contend with.
Reviewed by: kib (earlier version), markj
(cherry picked from commit 4b202f4faf40fd7af8b84491360186aed8ce5733)
libthr: add some tests for pthread_atfork() handling
Test that it generally functions, and also that registering multiple
times calls each handler in the order that it's documented to call them
in.
Reviewed by: kib, markj
(cherry picked from commit 7e6ac503ffeb81733272d54af367db58e45e57ca)
_utmx_op: don't recurse on chain busy
In handling a PP mutex, we'll busy it as soon as we enter the loop and
unbusy it either prior to sleeping or at exit time. In this particular
case, if we fail to transition the mutex from OWNERDEAD -> owned because
of casueword(9) failure and the suspend check fails, we'll start over
and attempt to busy an already-busied chain and irrecoverably lock up
both this thread and anything else that tries to busy the chain.
Unbusy the chain prior to restarting because I couldn't decide if that
was a better or worse idea than just keeping track of whether we dirtied
it in do_lock_pp() and avoiding re-dirty. This is marginally easier to
reason about as it returns us to expected state on entry to the loop.
While we're here, simplify the code a bit as `error` will be clobbered
right after the branch anyways.
Reviewed by: kib, olce (both earlier version)
(cherry picked from commit f660777865fcc28e147b51362412e0286e7df78e)
timedef: remove redundancy in Catalan date_fmt definitions
This is already factored into the month names, resulting in an awkward
construction:
$ env LC_ALL=ca_ES.UTF-8 date
dimecres, 6 de de novembre de 2024, 21:21:18 CST
This would now render as:
$ env LC_ALL=ca_ES.UTF-8 date
dimecres, 6 de novembre de 2024, 21:22:41 CST
Reviewed by: bapt, royger
Sponsored by: Klara, Inc.
(cherry picked from commit a4b7367eb027a99b9eb48bf18951049434a9e189)
sed: fix commandline-given expression when -e is not used
Make explicit sed commands (first on commandline) behave the same
as those given with -e.
Without this patch the following two commands behave differently,
the second one being wrong:
echo ab | sed -e $'1 i\\\n--'
echo ab | sed $'1 i\\\n--'
Reviewed by: 0mp, des, kevans
Sponsored by: Klara, Inc.
(cherry picked from commit 0552fdc62caf034397ffd5b07dfbad853aef5aa8)
localedata: add some exceptions to utf8proc widths
Hangul Jamo medial vowels and final consonants are reportedly combining
characters that won't take up any columns on their own and should be
reported as zero-width, so add an exception for these as well to reflect
how they work in practice. This conforms to how other implementations
(e.g., glibc) treat these characters.
Reviewed by: bapt (earlier version), jkim
Sponsored by: Klara, Inc.
(cherry picked from commit 160c36eae41afa3c4944ed44778c2b48db8fbb77)
_utmx_op: don't recurse on chain busy
In handling a PP mutex, we'll busy it as soon as we enter the loop and
unbusy it either prior to sleeping or at exit time. In this particular
case, if we fail to transition the mutex from OWNERDEAD -> owned because
of casueword(9) failure and the suspend check fails, we'll start over
and attempt to busy an already-busied chain and irrecoverably lock up
both this thread and anything else that tries to busy the chain.
Unbusy the chain prior to restarting because I couldn't decide if that
was a better or worse idea than just keeping track of whether we dirtied
it in do_lock_pp() and avoiding re-dirty. This is marginally easier to
reason about as it returns us to expected state on entry to the loop.
While we're here, simplify the code a bit as `error` will be clobbered
right after the branch anyways.
Reviewed by: kib, olce (both earlier version)
(cherry picked from commit f660777865fcc28e147b51362412e0286e7df78e)
timedef: remove redundancy in Catalan date_fmt definitions
This is already factored into the month names, resulting in an awkward
construction:
$ env LC_ALL=ca_ES.UTF-8 date
dimecres, 6 de de novembre de 2024, 21:21:18 CST
This would now render as:
$ env LC_ALL=ca_ES.UTF-8 date
dimecres, 6 de novembre de 2024, 21:22:41 CST
Reviewed by: bapt, royger
Sponsored by: Klara, Inc.
(cherry picked from commit a4b7367eb027a99b9eb48bf18951049434a9e189)
localedata: add some exceptions to utf8proc widths
Hangul Jamo medial vowels and final consonants are reportedly combining
characters that won't take up any columns on their own and should be
reported as zero-width, so add an exception for these as well to reflect
how they work in practice. This conforms to how other implementations
(e.g., glibc) treat these characters.
Reviewed by: bapt (earlier version), jkim
Sponsored by: Klara, Inc.
(cherry picked from commit 160c36eae41afa3c4944ed44778c2b48db8fbb77)
sed: fix commandline-given expression when -e is not used
Make explicit sed commands (first on commandline) behave the same
as those given with -e.
Without this patch the following two commands behave differently,
the second one being wrong:
echo ab | sed -e $'1 i\\\n--'
echo ab | sed $'1 i\\\n--'
Reviewed by: 0mp, des, kevans
Sponsored by: Klara, Inc.
(cherry picked from commit 0552fdc62caf034397ffd5b07dfbad853aef5aa8)
release: Don't break if firmware install fails
On some platforms (e.g. powerpc) we don't have packages, so we can't
install them onto the ISOs. Proceed with building the images anyway.
Reported by: Weekly snapshot builds
Fixes: 7e2996c1f5b4 ("release: install wireless firmware onto disc1 and dvd")
Approved by: re (cperciva)
(cherry picked from commit e8263ace39c8ecf11233c0a10d0b1839e6813046)
(cherry picked from commit 9431091ee021eca9eb4c768b566e623ba9333b41)
release: install wireless firmware onto disc1 and dvd
Wireless driver firmware is no longer added to the src tree.
In order to have wireless support in the installer for the new drivers
we install the firmware packages onto disc1 (and memstick) and dvd
if built on FreeBSD and NOPKG is not defined (to not break cross-builds
from Linux or OSX and to allow people to opt-out).
Sponsored by: The FreeBSD Foundation
Submitted by: cperciva (the orig. commands and where to place them)
Reviewed by: jrtc27
Approved by: re (cperciva)
Differential Revision: https://reviews.freebsd.org/D47407
(cherry picked from commit 7e2996c1f5b4e684cae40c2418b68061df9997d9)
(cherry picked from commit b62012538e967b22736e8c2214b222f21146bddc)
bsdinstall: wlanconfig: fix interface UP on (re-)starting wpa_supplicant
Make sure an interface is back up before (re-)starting wpa_supplicant
in wlanconfig not relying on wpa to UP the interface (though we fixed
that).
Sponsored by: The FreeBSD Foundation
Reviewed by: emaste (in D47491)
Approved by: re (cperciva)
Differential Revision: https://reviews.freebsd.org/D47491
(cherry picked from commit 5399052c63a7a3d2f54615d31bfd092ab887a600)
(cherry picked from commit 7d0c12e1f907ddf9be6668449a966703c0f781d1)
bsdinstall: add menu to install firmware
Add a menu to the installer to run fwget(8) inside the newly installed
system to install firmware known to be needed.
This requires working netowrking.
This is needed at least for wireless currently for when we entirely
stop shipping new firmware in src.git to have working networking on
the installed system (we already do need this for at least rtw89).
Sponsored by: The FreeBSD Foundation
Tested with: 4 different iwlwifi chipsets in a system (earlier version)
Suggested improvments by: jrtc27
Approved by: re (cperciva)
Differential Revision: https://reviews.freebsd.org/D47491
(cherry picked from commit bbe2a1da2df639c616869aa838244c8094779bd4)
(cherry picked from commit 15f6edf20e4e1542f2385a9cbd6e996e23252858)
efirt: mark dynamic region executing the RT code with the TDP_EFIRT flag
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D47694
device_pager: user iterators to free device pages
Change cdev_mgtdev_page_free_page to take an iterator, rather than an
object and page, so that removing the page from the object radix tree
can take advantage of locality with iterators. Define a
general-purpose function to free all pages, which can be used in
several places.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D47692
ng_parse: disallow negative length for malloc
This is an interim robustness improvement; further improvements as
described in the PR and/or Phabricator review are still needed.
PR: 267334
Reported by: Robert Morris <rtm at lcs.mit.edu>
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D37229
hexdump.3: Add missing LIBRARY section
All the other libutil section 3 manpages document this, and although
it's heavily implied by the libutil.h header in the synopsis, we should
still be explicit and consistent.
PR: 280078
Reviewed by: jrtc27
MFC after: 1 week
netgraph: Exit the net epoch to handle control messages
In general, in the direct dispatch case netgraph only enters the net
epoch to send data messages, but this was inconsistent with the netgraph
thread, which also entered the net epoch to send fn and fn2 messages to
nodes. Some handlers, e.g., ng_bridge_newhook(), may sleep, and so
cannot be called in epoch context; the netgraph tests occasionally panic
due to this problem.
Make ngthread() consistent with the direct dispatch path.
Discussed with: afedorov (in D44615)
MFC after: 2 weeks
Sponsored by: Klara, Inc.
devd tests: Fix client_test
The loop doesn't check for overflow of the event buffer, which can
easily happen if other tests are running in parallel (the bectl tests in
particular trigger devd events).
When that overflow occurs, a funny thing can happen: the loop ends up
trying to read 0 bytes from the socket, succeeds, and then prints its
buffer to stdout. It does this as fast as possible, eventually timing
out. Then, because kyua wants to log the test's output, it slurps the
output file into memory so that it can insert it into the test db. This
output file is quite large, usually around 8GB when I see it happen, and
is large enough to trigger an OOM kill in my test suite runner VM.
Fix the test: use a larger buffer and fail the test if we fill it before
both events are observed. Also don't print the output buffer on every
loop iteration, since unlike the seqpacket test that will just print the
same output over and over.
[4 lines not shown]
fibs_test: Run in a jail
These tests assume exclusive use of one or more FIBs and so can't be run
in parallel. Running them in a VNET jail sidesteps this problem.
MFC after: 1 week
Sponsored by: Klara, Inc.
Sponsored by: Stormshield
md: Fix linking of embedded filesystem images on aarch64
embedfs.S needs the right aarch64 features for BTI and/or PAC.
Obtained from: CheriBSD
Fixes: c2e0d56f5e49 ("arm64: Support BTI checking in most of the kernel")
Sponsored by: AFRL, DARPA