On 5/19/26 02:53, Dag-Erling Smørg rav wrote:
The branch main has been updated by des:
URL:
https://cgit.FreeBSD.org/src/commit/?id=4617a6cb82a673b02257257c1f5f8a3c8d2bb943
commit 4617a6cb82a673b02257257c1f5f8a3c8d2bb943
Author: Dag-Erling Smørgrav <[email protected]>
AuthorDate: 2026-05-19 06:52:53 +0000
Commit: Dag-Erling Smørgrav <[email protected]>
CommitDate: 2026-05-19 06:53:35 +0000
nlist: Handle multiple symbol tables
* Instead of looking for and stopping at the first SHT_SYMTAB section,
iterate over all SHT_DYNSYM and SHT_SYMTAB sections until we've either
found all our symbols or run out.
* Perform bounds checks on section and string table offsets and sizes
before attempting to mmap() the string table.
* Perform bounds checks on individual symbol table entries before
attempting to access the corresponding strings.
* Stop treating _Foo and Foo as the same symbol.
This unbreaks OpenSSH which uses nlist(3) to verify PKCS#11 providers.
The _Foo vs Foo change broke many uses of kvm_nlist in the tree. In particular,
ktrdump no longer works on crashdumps now, and I finally single-stepped through
it today to figure out why.
A quick grep shows me all these places that are now broken:
lib/libkvm/kvm_cptime.c: { .n_name = "_cp_time" }, /*
(deprecated) */
lib/libkvm/kvm_getloadavg.c: { .n_name = "_averunnable" },
lib/libkvm/kvm_getloadavg.c: { .n_name = "_fscale" },
lib/libkvm/kvm_getswapinfo.c: { .n_name = "_swtailq" }, /* list of swap
devices and sizes */
lib/libkvm/kvm_getswapinfo.c: { .n_name = "_dmmax" }, /* maximum size
of a swap block */
lib/libkvm/kvm_pcpu.c: { .n_name = "_cpuid_to_pcpu" },
lib/libkvm/kvm_pcpu.c: { .n_name = "_mp_maxcpus" },
lib/libkvm/kvm_pcpu.c: { .n_name = "_mp_ncpus" },
lib/libkvm/kvm_pcpu.c: { .n_name = "___pcpu" },
lib/libkvm/kvm_pcpu.c: { .n_name = "___start_" DPCPU_SETNAME },
lib/libkvm/kvm_pcpu.c: { .n_name = "___stop_" DPCPU_SETNAME },
lib/libkvm/kvm_pcpu.c: { .n_name = "_dpcpu_off" },
lib/libkvm/kvm_pcpu.c: { .n_name = "_mp_maxcpus" },
lib/libkvm/kvm_proc.c: nl[0].n_name = "_nprocs";
lib/libkvm/kvm_proc.c: nl[1].n_name = "_allproc";
lib/libkvm/kvm_proc.c: nl[2].n_name = "_ticks";
lib/libkvm/kvm_proc.c: nl[3].n_name = "_hz";
lib/libkvm/kvm_proc.c: nl[4].n_name = "_cpu_tick_frequency";
lib/libkvm/kvm_proc.c: nlz[0].n_name = "_zombproc";
lib/libkvm/kvm_vnet.c: { .n_name = "___start_" VNET_SETNAME },
lib/libkvm/kvm_vnet.c: { .n_name = "___stop_" VNET_SETNAME },
lib/libmemstat/memstat_malloc.c: { .n_name = "_kmemstatistics" },
lib/libmemstat/memstat_malloc.c: { .n_name = "_kmemzones" },
lib/libmemstat/memstat_malloc.c: { .n_name = "_numzones" },
lib/libmemstat/memstat_malloc.c: { .n_name = "_vm_malloc_zone_count" },
lib/libmemstat/memstat_malloc.c: { .n_name = "_mp_maxcpus" },
lib/libmemstat/memstat_uma.c: { .n_name = "_uma_kegs" },
lib/libmemstat/memstat_uma.c: { .n_name = "_mp_maxid" },
lib/libmemstat/memstat_uma.c: { .n_name = "_all_cpus" },
lib/libmemstat/memstat_uma.c: { .n_name = "_vm_ndomains" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_buf" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_bufsize" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_maxbufsize" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_bufoff" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_inprogress" },
tools/tools/ifpifa/ifpifa.c: { .n_name = "_ifnet", },
tools/tools/umastat/umastat.c: { .n_name = "_uma_kegs" },
tools/tools/umastat/umastat.c: { .n_name = "_mp_maxcpus" },
tools/tools/umastat/umastat.c: { .n_name = "_mp_maxid" },
tools/tools/umastat/umastat.c: { .n_name = "_all_cpus" },
usr.bin/ktrdump/ktrdump.c: { .n_name = "_ktr_version" },
usr.bin/ktrdump/ktrdump.c: { .n_name = "_ktr_entries" },
usr.bin/ktrdump/ktrdump.c: { .n_name = "_ktr_idx" },
usr.bin/ktrdump/ktrdump.c: { .n_name = "_ktr_buf" },
usr.bin/vmstat/vmstat.c: [X_SUM] = { .n_name = "_vm_cnt", },
usr.bin/vmstat/vmstat.c: [X_HZ] = { .n_name = "_hz", },
usr.bin/vmstat/vmstat.c: [X_STATHZ] = { .n_name = "_stathz", },
usr.bin/vmstat/vmstat.c: [X_NCHSTATS] = { .n_name = "_nchstats", },
usr.bin/vmstat/vmstat.c: [X_INTRNAMES] = { .n_name = "_intrnames", },
usr.bin/vmstat/vmstat.c: [X_SINTRNAMES] = { .n_name = "_sintrnames", },
usr.bin/vmstat/vmstat.c: [X_INTRCNT] = { .n_name = "_intrcnt", },
usr.bin/vmstat/vmstat.c: [X_SINTRCNT] = { .n_name = "_sintrcnt", },
usr.bin/vmstat/vmstat.c: [X_NINTRCNT] = { .n_name = "_nintrcnt", },
usr.sbin/iostat/iostat.c: { .n_name = "_tty_nin",
usr.sbin/iostat/iostat.c: { .n_name = "_tty_nout",
usr.sbin/iostat/iostat.c: { .n_name = "_boottime",
Would you rather revert the underscore change or fix all these?
--
John Baldwin