Commit Graph

298735 Commits

Author SHA1 Message Date
John Baldwin 5e6befdaca atf: Switch from std::auto_ptr<> to std::unique_ptr<>
This mirrors upstream commit f053ab687f6e27aa264f599ecbfc5ef27ad4e2d3.

Reviewed by:	emaste
Differential Revision:	https://reviews.freebsd.org/D49789
2025-04-16 10:10:35 -04:00
John Baldwin 25f2634a1f lutok: Switch from std::auto_ptr<> to std::unique_ptr<>
This mirrors upstream commit bd5904144c9778a07685f3e4efa6ef011a5480ec.

Reviewed by:	igoro, imp, emaste
Differential Revision:	https://reviews.freebsd.org/D49788
2025-04-16 10:09:18 -04:00
John Baldwin f1a94c5552 bsd.sys.mk: Re-enable warnings for C++11 extensions
This should no longer be relevant since the default C++ standard is
C++17.

Reviewed by:	imp, asomers, emaste
Differential Revision:	https://reviews.freebsd.org/D49787
2025-04-16 09:41:42 -04:00
John Baldwin 5737c2ae06 telnet: Prevent buffer overflow in the user prompt for SRA
The Secure RPC authenticator for telnet prompts the local user for the
username to use for authentication.  Previously it was using sprintf()
into a buffer of 256 bytes, but the username received over the wire
can be up to 255 bytes long which would overflow the prompt buffer.
Fix this in two ways: First, use snprintf() and check for overflow.
If the prompt buffer overflows, fail authentication without prompting
the user.  Second, add 10 bytes to the buffer size to account for the
overhead of the prompt so that a maximally sized username fits.

While here, replace a bare 255 in the subsequent telnet_gets call with
an expression using sizeof() the relevant buffer.

PR:		270263
Reported by:	Robert Morris <rtm@lcs.mit.edu>
Tested on:	CHERI
Reviewed by:	emaste
Differential Revision:	https://reviews.freebsd.org/D49832
2025-04-16 09:41:03 -04:00
Andrew Gallatin b836c229aa ip6: leave room for link headers in UDP
UDP over IPv6 was not leaving space for link headers,
resulting in the ethernet header being placed in its own mbuf
at the front of the mbuf chain sent down to the NIC driver.
This is inefficient, in terms of allocating 2x as many
header mbufs as needed, and its also confusing for drivers
which may expect to find ether/ip/l4 headers together in the same
mbuf.

Reviewed by: glebius, rrs, tuexen
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D49840

This is a port of e6ccd70936, which was done by Robert
Watson in 2004 for IP4
2025-04-15 19:44:56 -04:00
Warner Losh b7f71ffe0f full-test.sh: Add lib/libtinfow.so.9 to image
libedit.so.8 needs libtinfow.so.9 too, starting in stable/14. so
add it here.

With this I have an image that boots the minimal 'echo success' test for
LinuxBoot on amd64... Though changes for that aren't upstreamed just
yet. They need to be cleaned up a little before I do that. Stay tuned.

Sponsored by:		Netflix
2025-04-15 17:14:47 -06:00
Doug Rabson 3a79ca6553 release: avoid sparse-file handling for container image layers
This improves compatiblity with Podman. See
https://github.com/containers/podman/issues/25270 for details.

Differential Revision:  https://reviews.freebsd.org/D49821
2025-04-15 22:01:45 +00:00
Lexi Winter c594920250 sys/net: add DOT1Q_VID_{MIN,MAX}
add a new typedef in if_vlan_var.h to represent the lowest (1) and
highest (4095) valid VLAN IDs in a .1q tag.

change if_vlan to use DOT1Q_VID_MAX instead of a magic number.

Reviewed by:	kp
Differential Revision:	https://reviews.freebsd.org/D49837
2025-04-15 23:42:59 +02:00
Lexi Winter 96f830456f sys/net: add a new ether_vlanid_t type
ether_vlanid_t is a type to represent a VLAN ID, for example inside a
.1q tag.  since this is specific to Ethernet, put it in net/ethernet.h.

change bridge to use the new type instead of uint{16,32}_t.

Reviewed by:	adrian, kp
Differential Revision:	https://reviews.freebsd.org/D49836
2025-04-15 23:42:59 +02:00
Mark Johnston 1bb8b1d7e1 libdtrace: Fix formatting of messages about drops
dt_oformat_drop() should only be called when in structured output mode.

Reviewed by:	Domagoj Stolfa
Fixes:		93f27766a7 ("dtrace: Add the 'oformat' libdtrace option")
2025-04-15 18:26:59 +00:00
Ed Maste 4c76131024 OpenSSH: Regen config.h for DSA retirement
The net result of this change is the removal of a few comments from
config.h; it has no direct user-facing impact as DSA was already
disabled as of commit 0b707d5fe8 ("ssh: Disable support for DSA
keys").

Reviewed by:	jlduran, philip
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49739
2025-04-15 14:15:33 -04:00
Ed Maste 3dcf2c2caf OpenSSH: remove ability to enable DSA support (in configure)
DSA is deprecated and upstream OpenSSH is in the process of removing it.

From OpenSSH-portable 10.0, cherry-pick the configure change so that we
can independently decide what to merge to stable branches.

This change has no direct user-facing impact, as the upstream configure
script is not used in the FreeBSD build process.  It is worth noting as
part of OpenSSH's full removal of DSA support.

Reviewed by:	jlduran, philip
Relnotes:	Yes
Obtained from:	OpenSSH-portable 6c9872faa1c2
Sponsored by:	The FreeBSD Foundation
2025-04-15 14:12:55 -04:00
Dag-Erling Smørgrav 8ce85300c7 ln: Tweak append logic.
If the target is "." or ends in "/" or "/.", we always want to append
the source's basename, even in the Fflag case.

MFC after:	never
Relnotes:	yes
Sponsored by:	Klara, Inc.
Reviewed by:	allanjude
Differential Revision:	https://reviews.freebsd.org/D49842
2025-04-15 19:57:52 +02:00
Dag-Erling Smørgrav 7622e2d21a cp: Improve error messages.
MFC after:	1 week
Sponsored by:	Klara, Inc.
Reviewed by:	allanjude, markj
Differential Revision:	https://reviews.freebsd.org/D49841
2025-04-15 19:57:38 +02:00
Doug Moore adc33d3288 vm_kern: in unback, init cursor while unlocked
In kmem_unback(), take one small bit of code out of the region where
the write lock is held.

Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D49834
2025-04-15 11:42:06 -05:00
Kristof Provost 0fc3c29fb3 pfctl: also remove incorrect counter print for rule anchors
Just as for nat anchors we can't print counters for rule anchors. Remove the
incorrect print call.

MFC after:	2 weeks
Sponsored by:	Rubicon Communications, LLC ("Netgate")
2025-04-15 13:13:50 +02:00
Kristof Provost 4e5657ab34 pf: pass struct pf_pdesc to pf_change_ap()
Rather than passing the mbuf pass the struct pf_pdesc pointer. This also
contains the mbuf, as well as other fields (e.g. af, naf) we can use rather than
having to pass them as an argument. We'll make that change in the next commit.

Sponsored by:	Rubicon Communications, LLC ("Netgate")
2025-04-15 09:47:48 +02:00
Kristof Provost 29273f6a25 pf: add SDT on REASON_SET()
Add a probe point in the REASON_SET macro. This can be halpful during debugging,
letting us figure out exactly where PF made a decision.

Sponsored by:	Rubicon Communications, LLC ("Netgate")
2025-04-15 09:47:48 +02:00
Kristof Provost 9c68e37d96 pf: share reason between pf_test() and pf_test_rule()
pass a pointer to pf_test()'s reason to pf_test_rule instead of using a
local one. While we always intended to keep the logging in pf_test_rule
and pf_test so seperate that we don't end up with a wrong reason, this
is just too fragile and I can't even convince myself that it still is
right. pointed out by markus, ok bluhm benno

Obtained from:	OpenBSD, henning <henning@openbsd.org>, f25274e4c5
Sponsored by:	Rubicon Communications, LLC ("Netgate")
2025-04-15 09:47:47 +02:00
Kristof Provost 168d873ae4 pfctl: fix crash on "pfctl -a '*' -vvsr"
When printing a nat anchor we don't have rule information, or rule
counters. Do not attempt to print them. The information is nonsensical
anyway, and this can cause a crash converting the timestamp to a string,
as years in the very distant future use more digits, and we exceed the
30 byte buffer allocated for this.

MFC after:	2 weeks
Sponsored by:	Orange Business Services
2025-04-15 07:39:35 +02:00
Ed Maste 0164dc9851 release: Emit warning if NO_ROOT used with pkg-stage
pkg-stage.sh (used by the disc1 build) does not currently support
METALOG output for NO_ROOT builds.  Emit a warning for this case.

PR:		283387
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49785
2025-04-14 21:01:56 -04:00
Mark Johnston 992b18a9ec so_splice: Synchronize so_unsplice() with so_splice()
so_unsplice() assumed that if SB_SPLICED is set in the receive buffer of
the first socket, then the splice is fully initialized.  However, that's
not true, and it's possible for so_unsplice() to race ahead of
so_splice().

Modify so_unsplice() to simply bail if the splice state is embryonic.

Reported by:	syzkaller
Reviewed by:	gallatin
Fixes:		a1da7dc1cd ("socket: Implement SO_SPLICE")
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D49814
2025-04-15 00:55:00 +00:00
Michael Tuexen dd9e59beeb symlink.2: document EOPNOTSUPP
When the file system does not support symbolic links (like in the case
of MSDOS), symlink() returns -1 and sets errno to EOPNOTSUPP.
Document this behavior.

Reviewed by:		glebius, markj
MFC after:		3 days
Sponsored by:		Netflix, Inc.
Differential Revision:	https://reviews.freebsd.org/D49803
2025-04-15 00:03:19 +02:00
Bjoern A. Zeeb a1adefb139 LinuxKPI; 802.11: start filling rxrate statistics
Start collecting rxrate information from the RX statistics which are
passed per packet.  Store them in the lsta and upon printing statistics,
if no RX_BIRATE is provided copy them over from the lsta.

This allows us to see rate information in both directions on modern
iwlwifi chipsets, which are doing [tx]rate handling in firmware.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:51 +00:00
Bjoern A. Zeeb dbae3dcff7 LinuxKPI: 802.11: avoid using an mbuf tag for now
We are using an mbuf tag to carry the ni reference in the TX path
from the TX function past the taskq along with the mbuf.
Contrary to initial assumptions we only need the ni and no other data
so attach the ni to m->m_pkthdr.PH_loc.ptr avoiding the extra allcation.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:51 +00:00
Bjoern A. Zeeb 832b8e986c LinuxKPI: 802.11: increase mbufq lengths
Increase the mbufq lengths we use in the RX and TX path to decouple
the lower and upper parts (currently using taskqs which likely need
to be replaced as well now -- was asked not to add more sophisticated
concepts 2-ish years ago).
The old values of IFQ_MAXLEN (50) are a tad too small so bump them
to 32 * NAPI_POLL_WEIGHT (32 * 64) which seems to be mostly enough
now not to drop mbufs anymore (by not overflowing the queues).
As a side effect TCP became a lot happier as well growing throughput
towards where UDP is already.  There is more fish to fry but we
are also doing ~750 Mbits/sec TX and 400 Mbit/s RX TCP at VHT160 now.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:50 +00:00
Bjoern A. Zeeb c013f810ec LinuxKPI: 802.11: better dealing with errors in RX path
In case we fail to allocate the mbuf or mtag in the RX path or fail
for other reasons report it as ic_ierrors for better diagnostics
and more correct statistics.
Also do what the comment had indicated and mandate that mtag allocation
succeeds or otherwise drop the packet.  There may be room for future
improvements in a follow-up commit here.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:50 +00:00
Bjoern A. Zeeb 9a45c3ca85 LinuxKPI: 802.11: deal with the error paths for lkpi_xmit()
Rename lkpi_ic_raw_xmit() to lkpi_xmit() as we need a wrapper to add
an extra argument as (*ic_raw_xmit) and (*ic_transmit) have different
invariants.  Based on the caller free the mbuf in the error case or
not to satisfy the requirements of the caller.  For more information
see the comment in the code.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:50 +00:00
Bjoern A. Zeeb c816f64e66 LinuxKPI: 802.11: plug mbuf leak
Now that we are doing VHT it is possible to overflow the mbufqs
we use in the TX and RX paths.  Check the return code of mbufq_enqueue()
deal with any error accordingly and propagate it.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-14 14:06:50 +00:00
Lexi Winter 6fbd1bed6e rc.subr: add ${svc}_svcj_ipaddrs option
setting ${svc}_svcj_ipaddrs to a list of IP addresses causes rc.subr to
set ip6.addr and/or ip4.addr when starting the jail, restricting it to
those IP addresses rather than inheriting all IP addresses.

for example:

inetd_enable=YES
inetd_svcj=YES
inetd_svcj_options="net_basic"
inetd_svcj_ipaddrs="::1 127.0.0.1 2001:db8::1"

if not specified, the default value is unchanged (inherit all addresses
if networking is enabled).

Reviewed by:	netchild
2025-04-14 15:11:06 +02:00
Tom Jones 71baab405e iwx: Remove debug logging code
This debugging code was added this log as part of an effort to diagnose
firmware crashes in an earlier version of the driver.
It hasn't been used for a while and I'm not sure how useful it is for
this compared to other methods.

While reorganisation move strings for print mappings into if_iwx_debug.c
to reduce their scope.

Suggested by:	bz
Reviewed by:	bz
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49783
2025-04-14 09:56:23 +01:00
Tom Jones 1110ed3b46 iwx: Use subdevice for comparison
iwx goes through a couple of steps to match devices to firmware. There
is a default match of pcie device and subdevices and then a secondary
pass to find a template configuration struct.

Previously we were looking up the device not the subdevice and that
led to ax210 cards in some devices (Framework 13) from being matched to
the correct firmware.

PR:	285905
Reviewed by:	bz, adrian
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D49759
2025-04-14 09:16:40 +01:00
Doug Moore 9cc7339753 vm_page: use iterators in page allocaction
Change vm_page_alloc_after() and vm_page_alloc_domain_after() to take
a page iterator argument, to allow for faster insertion into the radix
trie of pages.  Where a caller of one of those functions doesn't
already have a page iterator to use, define one.  Where vm_page_grab()
is invoked in a loop, invoke a new version with an iterator argument,
and pass the same iterator in each call.  Make sure that
vm_page_alloc_after() and vm_page_alloc_domain_after() return with the
iterator in a valid state, even when the object lock was briefly lost
and regained.

Reviewed by:	markj
Differential Revision:	https://reviews.freebsd.org/D49688
2025-04-14 02:05:21 -05:00
Mark Johnston c983676419 vm_fault: Defer marking COW pages valid
Suppose an object O has two shadow objects S1, S2 mapped into processes
P1, P2.  Suppose a page resident in O is mapped read-only into P1.  Now
suppose that P1 writes to the page, triggering a COW fault: it allocates
a new page in S1 and copies the page, then marks it valid.  If the page
in O was busy when initially looked up, P1 would have to release the map
lock and sleep first.  Then, after handling COW, P1 must re-check the
map lookup because locks were dropped.  Suppose the map indeed changed,
so P1 has to retry the fault.

At this point, the mapped page in O is shadowed by a valid page in S1.
If P2 exits, S2 will be deallocated, resulting in a collapse of O into
S1.  In this case, because the mapped page is shadowed, P2 will free it,
but that is illegal; this triggers a "freeing mapped page" assertion in
invariants kernels.

Fix the problem by deferring the vm_page_valid() call which marks the
COW copy valid: only mark it once we know that the fault handler will
succeed.  It's okay to leave an invalid page in the top-level object; it
will be freed when the fault is retried, and vm_object_collapse_scan()
will similarly free invalid pages in the shadow object.

Reviewed by:	kib
MFC after:	1 month
Sponsored by:	Innovate UK
Differential Revision:	https://reviews.freebsd.org/D49758
2025-04-13 16:09:31 +00:00
Mark Johnston d8cf519492 fhopen: Restore the O_CREAT check
Fixes:	509189bb41 ("fhopen: Enable handling of O_PATH, fix some bugs")
2025-04-13 14:54:26 +00:00
Jean-Sébastien Pédron 21b556557e linuxkpi: Fix pci_upstream_bridge() with DRM devices
In the case of DRM drivers, the passed device is a child of `vgapci`. We
want to start the lookup from `vgapci`, so the parent of the passed
`drmn`. We use the `isdrm` flag to determine if we are in this
situation.

This fixes an infinite loop with the amdgpu DRM driver that started to
use this function in Linux 6.8: `pci_upstream_bridge()` was returning
itself and the code in amdgpu was calling it again, hoping to get a
device with a vendor that is not "ATI".

Reviewed by:	bz
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49388
2025-04-13 11:51:13 +02:00
Jean-Sébastien Pédron d9a2c2e250 linuxkpi: Add memcpy_{from,to}_page()
The i915 DRM driver started to use it in Linux 6.8.

Reviewed by:	bz
Sponsored by:   The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49384
2025-04-13 11:50:42 +02:00
Jean-Sébastien Pédron 78e25e65bf lindebugfs: Add debugfs_create_str()
This function is used by the i915 DRM driver starting with Linux 6.8.

Reviewed by:	bz, emaste
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D49067
2025-04-13 11:50:14 +02:00
Doug Moore c7780859aa vm: wrap long lines
In a few places where the 80-character limit is violated, wrap lines
to restore proper style.

Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D49802
2025-04-13 03:28:50 -05:00
Colin Percival 43d19e6a4c dhclient: Keep two clocks
Until July 2024, dhclient kept track of time as seconds-since-epoch as
a time_t.  This was a problem because (a) we wanted sub-second timeouts
and (b) timeouts didn't always do the right thing if the system clock
changed.

Switching to using CLOCK_MONOTONIC and struct timespec fixed those
issues but introduced a new problem: CLOCK_MONOTONIC values were being
intepreted as seconds-since-epoch and written to the dhclient.leases
file, causing confusion with DHCP leases expiring in early 1970.

Attempt to compromise between these by keeping track of both times;
any type within dhclient which is a time_t now refers to seconds past
the epoch, while any struct timespec value is a CLOCK_MONOTONIC time.

PR:	283256
Reviewed by:	dch
Fixes:	f0a38976b0 ("dhclient: Use clock_gettime() instead of time()")
Sponsored by:	Amazon
Differential Revision:	https://reviews.freebsd.org/D49720
2025-04-12 19:09:56 -07:00
Bjoern A. Zeeb 63578bf225 LinuxKPI: 802.11: enable fragmentation offload
Let the hardware handle fragmentation itself and tell net80211 to
save itself from it.  We already call the (*set_frag_threshold)
mac80211 function.

This should be a NOP for all currently enabled LinuxKPI based WiFi
drivers.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
2025-04-12 21:38:24 +00:00
Bjoern A. Zeeb 7acd5af48c LinuxKPI: bump __FreeBSD_version to 1500037 for alloc routine changes
Sponsored by:	The FreeBSD Foundation
2025-04-12 20:49:20 +00:00
Bjoern A. Zeeb a3e6f97bf5 LinuxKPI; cleanup slab.h a bit; move more free() into slab.c
Move kfree() into slab.c as an implementation and hide the private
function linux_kfree_async() entirely.

Remove a ; at the end of a define and sort some defines into place.

Remove extern from function declarations and move the closer to where
they belong.

Sort the functions into "base allocator/free" functions--these have
an implementation in slab.c and are ensuring contiguous physical
memory allocations.

Followed by inline functions using these base allocators to implement
their functionality; vmalloc/kvalloc, and misc functions.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
Reviewed by:	dumbbell
Differential Revision: https://reviews.freebsd.org/D49572
2025-04-12 20:49:20 +00:00
Bjoern A. Zeeb 1c95d401eb LinuxKPI: implement krealloc() for memory being contiguous
Implement krealloc_array() using krealloc().  Implement krealloc()
doing the various size checks ourselves and use realloc() or kmalloc()
depending on old and new allocation sizes.
This way we can ensure that allocated memory stays physically contiguous.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
Suggested by:	jhb (see D46657)
Reviewed by:	jhb, markj
Differential Revision: https://reviews.freebsd.org/D49571
2025-04-12 20:49:20 +00:00
Bjoern A. Zeeb c5cf4b64f4 malloc: extend malloc_usable_size() for contigmalloc
Extend malloc_usable_size() for contigmalloc;  it seems the only
outside consumer is LinuxKPI ksize() which by itself has little to
no consumer either.

Sponsored by:   The FreeBSD Foundation
MFC after:      3 days
Suggested by:   jhb (see D46657)
Reviewed by:    jhb, markj
Fixes:		9e6544dd6e
Differential Revision: https://reviews.freebsd.org/D49571
2025-04-12 20:49:19 +00:00
Bjoern A. Zeeb 1c81ebec74 LinuxKPI: switch mallocarray to an lkpi implementation using __kmalloc()
With mallocarray() we cannot guarantee that any size larger than
PAGE_SIZE will be contiguous.  Switch kmalloc_array() and
kmalloc_array_node() to use __kmalloc()/lkpi___kmalloc_node() as their
underlying implementation which now does provide that guarantee.
Likewise adjust kcalloc_node() to use kmalloc_array_node().
This means we only have two (plain + _node) underlying allocation
routines for the entire category of functions.

Also adjust kvmalloc() and kvmalloc_array() to be a "mirrored"
implementation to their non-v counterparts. These may return
non-contiguous memory so can use malloc().

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
Reviewed by:	jhb
Extra thanks to: jhb for helping sorting this out
Differential Revision: https://reviews.freebsd.org/D46657
2025-04-12 20:49:19 +00:00
Bjoern A. Zeeb 4359672e65 LinuxKPI: add seq_hex_dump()
Move the implementation of print_hex_dump() into linux_compat.c as
lkpi_hex_dump() taking an extra function pointer and argument.
Add two internal wrappers for printf and sbuf_printf to get a common
function definition (sbuf_printf takes the extra argument).

Use these to implement print_hex_dump() and the newly added
seq_hex_dump().

This allows us to re-use the same implementation of print_hex_dump()
for both functions without duplicating the code.

Initial implementation:	D49381 by dumbbell
Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
Reviewed by:	dumbbell
Differential Revision: https://reviews.freebsd.org/D49637
2025-04-12 20:49:19 +00:00
Ed Maste 2cb892c0b6 arch.7: Replace 13.x with 13.5
13.5 is the final FreeBSD 13.x release.

Sponsored by:	The FreeBSD Foundation
2025-04-12 14:14:43 -04:00
Maxim Konovalov f29d155577 reboot.8: Xr reboot(2)
PR:		259439
MFC after:	1 week
2025-04-12 17:02:08 +00:00
Bjoern A. Zeeb 84e1eb50dd net80211/regdomain: try to sort out TW
Try to help people in TW to get onto 11ac as well by adding the missing
entries to regdomain.xml.  Use at your own risk.

regdomain.xml is unmaintanable in the modern world with too many tiny
difference between countries.  We'll need a different way to generate
this or a different representation long term.

Sponsored by:	The FreeBSD Foundation
Reported by:	lwhsu
Tested by:	lwhsu
MFC after:	3 days
Reviewed by:	lwhsu, adrian
Differential Revision: https://reviews.freebsd.org/D49776
2025-04-12 16:49:39 +00:00