FreeBSD/src 6d49b0csbin/fsck_msdosfs ext.h fat.c

fsck_msdosfs: fix memory leaks in checkfilesys()

Invoke releasefat(fat) in checkfilesys() prior to free(fat) on exit paths
so that fatbuf, headbitmap.map, and fat32_cache entries are properly freed.

MFC after:      1 week
Pull Request:   https://github.com/freebsd/freebsd-src/pull/2351
DeltaFile
+4-1sbin/fsck_msdosfs/check.c
+1-1sbin/fsck_msdosfs/fat.c
+1-0sbin/fsck_msdosfs/ext.h
+6-23 files

FreeBSD/src 7af4168contrib/file aclocal.m4 configure, contrib/file/magic/Magdir atari

MFV: file 5.48

MFC after:      1 week
DeltaFile
+419-140contrib/file/configure
+297-130contrib/file/aclocal.m4
+233-0contrib/file/magic/Magdir/atari
+115-77contrib/file/src/softmagic.c
+178-0contrib/file/src/landlock.c
+51-113contrib/file/src/apprentice.c
+1,293-46076 files not shown
+2,759-89282 files

FreeBSD/src 74c539fsys/dev/tpm tpm20.h tpm20.c

tpm20: Move user copies outside the lifecycle lock

The TPM 2.0 character-device methods held the global device lock
while uiomove() accessed user memory.  User page faults could therefore
delay suspend or detach even though the read response was already
buffered.

Add a per-open sleepable lock to serialize operations on each response
buffer.  Stage commands under that lock before acquiring the device
lock, and copy them into the response buffer only after the lifecycle
checks succeed.  This preserves an unread response when suspend or
detach rejects a write.  Release the device lock before copying buffered
responses out.  Also advance the response offset by the bytes actually
copied when uiomove() returns after a partial transfer.

Validated on an Intel TPM 2.0 TIS device.  PCR reads and GetRandom
passed under 16-process mixed command load.  A response was consumed
correctly in 5-byte, 7-byte, and remainder reads.  Module unload/reload
recreated the device and entropy source without lock diagnostics.

    [6 lines not shown]
DeltaFile
+29-8sys/dev/tpm/tpm20.c
+1-0sys/dev/tpm/tpm20.h
+30-82 files

FreeBSD/src f613a43sys/dev/tpm tpm20.h

tpm20: Correct 32-bit register helpers

OR4() reads only the low byte before writing the complete 32-bit
register.  Preserve all register bits by using a matching 32-bit read.

Make BIT() produce an unsigned value so masks containing bit 31 do not
rely on a signed left shift into the sign bit.  OpenBSD carries the
same change.

Reviewed by:    kevans
MFC after:      2 weeks
Sponsored by:   BBOX.io
Differential Revision:  https://reviews.freebsd.org/D59244
DeltaFile
+2-2sys/dev/tpm/tpm20.h
+2-21 files

FreeBSD/src 2fe8510sys/dev/tpm tpm_crb.c tpm_tis_core.c

tpm20: Release transport state after command failures

Once a transport acquires locality, several TIS and CRB error paths
return without relinquishing it.  They can also leave a partial FIFO
transaction or an active CRB command for the next operation to inherit.

Route post-locality exits through common cleanup.  Reset the TIS command
state on every attempt.  For CRB, cancel an active failed command when
necessary, request the idle state, and relinquish locality even when the
state transition itself fails.

Successful command handling is unchanged apart from sharing the same
cleanup path.

Reviewed by:    kevans
MFC after:      2 weeks
Sponsored by:   BBOX.io
Differential Revision:  https://reviews.freebsd.org/D59243
DeltaFile
+41-24sys/dev/tpm/tpm_tis_core.c
+37-20sys/dev/tpm/tpm_crb.c
+78-442 files

FreeBSD/src add771dsys/dev/tpm tpm20.h tpm_tis_core.c

tpm_tis: Close interrupt wait races

The TIS interrupt handler can acknowledge and signal an event after
the waiter checks the device status but before it enters tsleep().
Since the handler is MPSAFE, the command lock does not close this
window.  A lost wakeup can delay a completed command for its full
timeout, up to 40 seconds for long TPM 2.0 operations.

Publish the expected event under an interrupt mutex and use a generation
counter to record matching interrupts.  Recheck the device predicate
without the mutex because register access may sleep on a SPI transport,
then compare the generation before atomically waiting on a condition
variable.  This closes the check-to-sleep race without placing sleeping
bus operations under a mutex.

Use an absolute deadline while retrying the predicate after wakeups.
Apply the same scheme to locality acquisition, which had an equivalent
race.  Leave the expected event published while polling so the
attach-time test can still prove that an advertised interrupt arrived.

    [10 lines not shown]
DeltaFile
+91-53sys/dev/tpm/tpm_tis_core.c
+6-0sys/dev/tpm/tpm20.h
+97-532 files

FreeBSD/src a3daa1esys/dev/tpm tpm20.h tpm20.c

tpm20: Harden the common device lifecycle

Mark the device as dying before teardown and destroy the character
device before freeing its private state or lock.  This prevents cdev
methods from entering with a freed internal buffer or a destroyed sx.

Check the teardown state in command paths, honor failures from the cdev
private data interface, and publish teardown before waiting for the
lifecycle lock.  Keep that lock across TPM retry delays so commands
cannot interpose and private state remains pinned, but abort before the
next retry once teardown begins.

Block new cdev operations after a successful Shutdown(STATE).  Keep the
suspend gate and the TPM command under the same lock so a userspace
command cannot invalidate the saved state before S3 entry.  Clear the
gate only after Startup(STATE) succeeds.

Keep entropy harvesting scheduled after a transient command or suspend
failure, but stop it while suspended or once teardown begins.  Queue the

    [14 lines not shown]
DeltaFile
+124-46sys/dev/tpm/tpm20.c
+2-0sys/dev/tpm/tpm20.h
+126-462 files

FreeBSD/src a229432sys/dev/tpm tpm20.h tpm_tis_core.c

tpm_tis: Restore validated interrupts after resume

TIS interrupt routing and enable registers may lose their state across
S3, while the driver retains its software indication that interrupts
work.  A subsequent locality or command wait can then sleep for an
interrupt that cannot arrive.

Remember whether interrupts worked before suspend and restore the
vector, pending status, and enable mask before TPM2_Startup.  Put the
transport in polling mode first; the interrupt handler promotes it back
to interrupt waits only after observing an interrupt from the restored
configuration.  If register restoration fails, Startup and subsequent
commands continue using polling.

Preserve the initial interrupt-enable mask, including the firmware's
trigger and polarity selection proven by the attach time interrupt test,
and restore that exact mask rather than accepting post-S3 defaults.

Program the same safe baseline for polling devices during attach and

    [16 lines not shown]
DeltaFile
+80-24sys/dev/tpm/tpm_tis_core.c
+1-0sys/dev/tpm/tpm20.h
+81-242 files

FreeBSD/src a0da653sys/dev/tpm tpm20.h tpm_tis_core.c

tpm20: Initialize common state before testing TIS interrupts

The TIS attach path tested its interrupt by transmitting GetRandom
before tpm20_init() allocated the internal command buffer.  A TPM2 FIFO
device with a usable IRQ could therefore dereference a null
internal_priv.

Initialize the common TPM2 state before running the interrupt test.
Make common cleanup safe for partially initialized devices and leave
cleanup to the attachment after tpm20_init() fails, avoiding duplicate
release of the lock, command buffer, and random-source state.

Clear the IRQ resource pointer after releasing it when interrupt handler
setup fails so the later polling-mode detach does not release it twice.

Free the internal command allocation through its object pointer rather
than relying on its embedded buffer being the first structure member.

Reviewed by:    kevans

    [3 lines not shown]
DeltaFile
+14-5sys/dev/tpm/tpm20.c
+9-5sys/dev/tpm/tpm_tis_core.c
+1-0sys/dev/tpm/tpm20.h
+24-103 files

FreeBSD/src 726f096sys/dev/tpm tpm20.h tpm20.c

tpm20: Validate suspend and resume commands

The internal TPM2_Shutdown and TPM2_Startup paths ignored both transport
failures and the TPM response.  Suspend could therefore enter S3 without
saved TPM state, while resume could restart entropy harvesting after a
failed state restoration.

Build both commands through one helper, validate their response framing
and TPM return codes, and propagate failures.  Retry the standard RETRY
and TESTING responses with bounded exponential backoff.  Accept
TPM_RC_INITIALIZE from Startup because firmware may already have started
the TPM during resume.

Do not enter S3 after an unsuccessful state save, and do not restart the
entropy task when TPM state restoration failed.  If Shutdown fails after
the entropy task was drained, requeue it before returning so an aborted
suspend does not permanently stop harvesting.

Reviewed by:    kevans

    [3 lines not shown]
DeltaFile
+102-62sys/dev/tpm/tpm20.c
+2-0sys/dev/tpm/tpm20.h
+104-622 files

FreeBSD/src d5aa802sys/dev/ixl if_ixl.c

ixl: Route suspend and resume through iflib

Register the iflib device suspend and resume methods.  Remove the
direct initialization from the driver resume callback because
iflib_device_resume() performs the datapath restart after the callback
returns.

MFC after:      2 weeks
Sponsored by:   BBOX.io
DeltaFile
+2-6sys/dev/ixl/if_ixl.c
+2-61 files

FreeBSD/src 10d09e6sys/dev/ixgbe if_ixv.c

ixv: Wire iflib suspend and resume methods

Register the standard iflib device suspend and resume methods so the
framework reinitializes the VF datapath after a system power
transition.

MFC after:      2 weeks
Sponsored by:   BBOX.io
DeltaFile
+2-0sys/dev/ixgbe/if_ixv.c
+2-01 files

FreeBSD/src b8fe6d7sys/dev/iavf if_iavf_iflib.c

iavf: Wire iflib suspend and resume methods

Register the iflib device suspend and resume methods so the existing
driver callbacks run during system power transitions.  This stops
mailbox retry work before suspend and lets iflib reinitialize the
datapath after resume.

MFC after:      2 weeks
Sponsored by:   BBOX.io
DeltaFile
+2-0sys/dev/iavf/if_iavf_iflib.c
+2-01 files

FreeBSD/src 2397b18sys/dev/axgbe if_axgbe_pci.c

axgbe: Wire iflib power management methods

Register the standard iflib device methods for shutdown, suspend, and
resume.  This gives axgbe the framework managed reinitialization used by
other iflib drivers after a power transition.

MFC after:      2 weeks
Sponsored by:   BBOX.io
DeltaFile
+3-0sys/dev/axgbe/if_axgbe_pci.c
+3-01 files

FreeBSD/src 58f9855sys/dev/enic if_enic.c

enic: Route resets through iflib lifecycle

Mark the driver stopped after attach so its first IFDI_STOP() call
does not repeat hardware shutdown.

Defer error interrupt recovery through iflib instead of calling
driver stop and init methods from interrupt context.  Let iflib own
the stop and restart around MTU changes as well, avoiding duplicate
lifecycle operations.

MFC after:      2 weeks
Sponsored by:   BBOX.io
DeltaFile
+4-4sys/dev/enic/if_enic.c
+4-41 files

FreeBSD/src 799061fsys/fs/nfsclient nfs_clrpcops.c, sys/rpc clntrdma.h

nfscl: A few more fixes for the NFS over RDMA client glue

A couple of additional fixes for the NFS client side RDMA glue:
- For Readdirplus, the reply needs to be a large chunk, so set
  M_PROTO9 instead of M_PROTO8.
- The nfsclrdma.ko module now uses xprt_rdma_unmap_chunk()
  instead of xprt_rdma_rekey_chunk().

Hopefully, this is it for the NFS over RDMA client glue changes.

MFC after:      3 months
Fixes:  884ee8d6c9b4 ("nfscl: Add some glue for client side NFS over RDMA")
DeltaFile
+1-3sys/rpc/clntrdma.h
+1-1sys/fs/nfsclient/nfs_clrpcops.c
+2-42 files

FreeBSD/src bbaf254etc/mtree BSD.tests.dist, sbin/fsck_msdosfs Makefile

fsck_msdosfs: add tests for lost cluster chain repair accounting

Add an ATF test suite covering Phase 3 ("Checking for Lost Files")
error accounting.  Test images are created using newfs_msdos(8),
and lost cluster chains are injected directly into FAT copies at
offsets derived from the BPB.  The LOST.DIR directory required by
reconnect() is constructed similarly: a root directory entry with
ATTR_DIRECTORY set and its first cluster pointing to a zero-filled
cluster containing "." and ".." entries.

The lost_chain_cleared and corrupted_lost_chain_reconnected test
cases provide regression coverage for the preceding commit:
 - lost_chain_cleared verifies that clearing a lost chain (the fallback
   taken when LOST.DIR is absent) exits with status 0 rather than 8
   (unrecovered error).
 - corrupted_lost_chain_reconnected verifies that FAT modifications
   from a chain truncated by checkchain() prior to reconnection are
   written back to disk, requiring "Update FATs? yes" and ensuring a
   clean second pass.

    [8 lines not shown]
DeltaFile
+261-0sbin/fsck_msdosfs/tests/fsck_msdosfs_test.sh
+5-0sbin/fsck_msdosfs/Makefile
+5-0sbin/fsck_msdosfs/tests/Makefile
+2-0etc/mtree/BSD.tests.dist
+273-04 files

FreeBSD/src 6cf0d6csbin/fsck_msdosfs fat.c

fsck_msdosfs: fix status accounting for lost cluster chains

checklost() scans for lost cluster chains and attempts to
repair each one, first by reconnecting it to LOST.DIR,
and falling back to clearing it if reconnection fails.
However, checklost() incorrectly updates the modification
status flags (mod), which checkfilesys() relies on to
determine whether to write back changes and what exit
status to return.

The current code have three issues:

1. A reconnect() failure immediately sets FSERROR in mod
   via "mod |= ret = reconnect(...)".  If reconnect() failed
   (e.g., because LOST.DIR is missing, or full) but the
   fallback clear operation succeeds, clearchain() frees the
   chain and sets FSFATMOD.  However, the leftover FSERROR
   remains in mod: checkfilesys() skips marking the file system
   clean and exits with status 8, even though the file system was

    [30 lines not shown]
DeltaFile
+32-9sbin/fsck_msdosfs/fat.c
+32-91 files

FreeBSD/src 17fb428usr.sbin/bhyve pci_passthru.c

bhyve: Keep passthrough PCI power state virtual

The passthrough Command register is emulated, but PMCSR writes were
sent directly to the physical function.  A guest D3hot-to-D0 transition
can perform an internal reset and clear physical Command while its
emulated copy remains enabled.

Cache the Power Management capability and keep the physical D-state
host-owned.  Emulate the guest D-state and advertise No_Soft_Reset so
the guest is not promised a function reset by a virtual power cycle.
Restore the assignment-time virtual state after a managed FLR.

Reviewed by:    markj
Sponsored by:   BBOX.io

(cherry picked from commit 3b90096cf9bcaec70b717e9ff0a9e23d14b600b6)
DeltaFile
+51-2usr.sbin/bhyve/pci_passthru.c
+51-21 files

FreeBSD/src f44cde3lib/libvmmapi ppt.c, sys/amd64/vmm vmm.c vmm_dev_machdep.c

bhyve: Manage passthrough devices across guest FLR

bhyve emulates the guest PCI Command register so BAR sizing does not
disable physical decoding.  However, PCIe Device Control was passed
through.  A guest VFIO reset therefore performed a physical FLR, which
cleared physical Command, while the guest restored only its emulated
copy.  The device remained assigned with bus mastering disabled and
could not fetch DMA descriptors.

Intercept guest FLR writes and issue a PPT-managed reset.  Stop all
vCPUs, verify ownership, quiesce the function, perform only an FLR, and
restore the host-owned PCI configuration, decode, and bus-master state.
Keep the IOMMU domain in place.  bhyve removes guest BAR mappings before
this ioctl; a later guest MEMEN write recreates them.  Never escalate a
guest FLR to a power reset.

Reset the guest-owned Command, MSI, MSI-X, MSI-X table, INTx, and MRRS
state.  PCIe 6.2 section 6.6.2 explicitly preserves MPS across FLR.
Virtualize MPS, MRRS, and Completion Timeout.  Keep physical MPS and

    [27 lines not shown]
DeltaFile
+347-7usr.sbin/bhyve/pci_passthru.c
+124-10sys/amd64/vmm/io/ppt.c
+10-3usr.sbin/bhyve/pci_emul.c
+13-0lib/libvmmapi/ppt.c
+10-0sys/amd64/vmm/vmm_dev_machdep.c
+7-0sys/amd64/vmm/vmm.c
+511-206 files not shown
+520-2112 files

FreeBSD/src 61b2ea4sys/dev/e1000 if_em.c

e1000: Report 82571 packet buffer ECC errors

The 82571 PBA_ECC register contains a 12-bit count of packet buffer ECC
detections.  The shared code enables single-bit correction, but neither
FreeBSD nor the DPDK base driver consumes the counter.

Sample it with the ordinary statistics timer, accumulate the value under
dev.em.N.memory_errors.detected_packet_buffer, and clear the hardware
counter while preserving correction and reserved register state.  Do not
enable its shared interrupt: the register does not distinguish corrected
from uncorrectable events and does not provide a safe fatal recovery
policy.

Validated on a dual port 82571EB.  Both functions reported zero after a
clean boot, and a controlled link down/up cycle left the counter at zero
while the management link recovered at 1 Gb/s without issue.

Sponsored by:   BBOX.io

(cherry picked from commit aec0f1b85b54d14819747ed3364f366d21e76d88)
DeltaFile
+47-7sys/dev/e1000/if_em.c
+47-71 files

FreeBSD/src 3c928cc. UPDATING, share/man/man9 iflibtxrx.9

iflib: Plumb per-packet RX hardware timestamps to mbufs

Add iri_rcv_tstmp to if_rxd_info so an isc_rxd_pkt_get() driver can
report a hardware RX timestamp.  Copy it into m_pkthdr.rcv_tstmp,
reusing the generic mbuf timestamp path.

Widen iri_flags from uint8_t to uint32_t and define the flags drivers
may supply.  Mask the flags before copying them into the mbuf so no
other mbuf state can leak through the driver callback.

Place the timestamp next to iri_frags to avoid an alignment hole, and
document its nanoseconds-since-boot representation and validity flags.
Bump __FreeBSD_version because changing if_rxd_info breaks KBI.

Reviewed by:    gallatin
Signed-off-by:  Sreekanth Reddy <sreekanth.reddy at broadcom.com>
Differential Revision:  https://reviews.freebsd.org/D58638
DeltaFile
+18-4share/man/man9/iflibtxrx.9
+9-1sys/net/iflib.h
+4-0UPDATING
+2-1sys/net/iflib.c
+1-1sys/sys/param.h
+34-75 files

FreeBSD/src d8b6461lib/msun/arm fenv.c, lib/msun/man fenv.3 fegetmode.3

libm: Implement femode_t, fegetmode(), and fesetmode() as per C23

Reviewed by:    kargl, kib
Approved by:    fuz (mentor)
MFC after:      1 month
Differential Revision:  https://reviews.freebsd.org/D59288
DeltaFile
+78-0lib/msun/x86/fenv.h
+70-0lib/msun/man/fegetmode.3
+63-0lib/msun/tests/fenv_test.c
+48-1lib/msun/man/fenv.3
+42-0lib/msun/arm/fenv.c
+33-0lib/msun/riscv/fenv.h
+334-113 files not shown
+532-319 files

FreeBSD/src 9d59ca7sys/net iflib.c

iflib: Do not hold the ifnet lock across registration

iflib_device_register() acquired IFNET_WLOCK to preserve lock order
when ether_ifattach() was called with the context lock held.  The context
lock is now released around ether_ifattach(), making registration-wide
ifnet serialization unnecessary.

Keeping IFNET_WLOCK across driver attachment also allows synchronous
interface event handlers to recurse on it.  The rtnetlink interface-group
dump does so through if_foreach_group() while handling the interface
attachment event.

Remove the outer lock and the corresponding failure-path unlock and
relock transitions.  Continue to drop the context lock around
ether_ifattach() and taskqueue drains, and preserve context-lock coverage
for driver attach and detach.

Validated under WITNESS on 82576 and I226 controllers.  Multiple VF
attach and detach cycles, netmap control operations, and every iflib

    [12 lines not shown]
DeltaFile
+5-18sys/net/iflib.c
+5-181 files

FreeBSD/src 87cfe4ausr.sbin/syslogd syslogd.c

syslogd: Pipes need the CAP_PDGETPID right as well

While here, use caph_rights_limit(), as syslogd already uses
caph_enter().

PR:             298104
Reported by:    mi
Fixes:          24816abb8740 ("syslogd: Limit rights on procdescs")
MFC after:      3 days
DeltaFile
+4-3usr.sbin/syslogd/syslogd.c
+4-31 files

FreeBSD/src 231dfc9usr.sbin/syslogd/tests syslogd_test.sh

syslogd/tests: Amend a test to catch leaked process descriptors

This serves to catch the regression fixed by commit
1a669b66ddb4 ("syslogd: reap pipe children on config reload").

MFC after:      1 week
DeltaFile
+7-0usr.sbin/syslogd/tests/syslogd_test.sh
+7-01 files

FreeBSD/src 60d7890cddl/usr.sbin/dtrace/tests dtrace.test.mk, cddl/usr.sbin/dtrace/tests/amd64/arrays Makefile

dtrace/tests: compile D sources at runtime on test target

Previously, we would precompile D test dependencies using the
host's dtrace, which unconditionally outputs ELF files in the
host's format. This breaks the cross-compile build with errors
like the following:

dtrace: failed to link script: incorrect ELF machine type for
object file: tst.usdt.pieo
--- usdt.o ---
*** Failed target: usdt.o

This patch moves compilation to runtime for all C-based testcases
that have a dependent D source file.

Reviewed by:    markj
MFC after:      1 week
Sponsored by:   The FreeBSD Foundation
Differential Revision:  https://reviews.freebsd.org/D59030
DeltaFile
+23-1cddl/usr.sbin/dtrace/tests/tools/dtest.sh
+10-8cddl/usr.sbin/dtrace/tests/dtrace.test.mk
+3-1cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh
+3-1cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile
+3-1cddl/usr.sbin/dtrace/tests/common/aggs/Makefile
+3-1cddl/usr.sbin/dtrace/tests/amd64/arrays/Makefile
+45-1387 files not shown
+306-10093 files

FreeBSD/src abf6f5asys/kern subr_devstat.c

devstat: Fix a kernel stack disclosure

The 16-byte "device_name" field was not zero-filled, so could contain
uninitialized stack data.  Zero the whole struct, as that's the
prevailing pattern for this kind of conversion code, and it's more
robust in the face of future revisions to struct devstat.

Reviewed by:    olce, kib
Reported by:    Reo Shiseki
Fixes:          a11d132f6c62 ("devstat: Provide 32-bit compatibility")
MFC after:      3 days
Sponsored by:   The FreeBSD Foundation
Differential Revision:  https://reviews.freebsd.org/D59309

(cherry picked from commit 7cb1a76f88158fb690418336b736e66c238cd4f7)
DeltaFile
+1-0sys/kern/subr_devstat.c
+1-01 files

FreeBSD/src 6484d55sys/dev/usb/wlan if_mtwvar.h

mtw: fix zero-length queue array that can corrupt struct mtw_softc

The mtw softc declares sc_epq with MTW_BULK_RX even though MTW_BULK_RX is enum
value 0, while initialization and queue handling index up to MTW_EP_QUEUES;
attaching a matching USB WLAN device can drive writes past the absent array and
corrupt adjacent softc fields.

This suggested patch sizes sc_epq with MTW_EP_QUEUES so the softc contains the
endpoint queues the driver initializes and uses.

Fixes:          c14b01624261 ("mt7601U: Importing if_mtw from OpenBSD")
Reviewed by:    bz
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D58897

(cherry picked from commit 7e9e72bee359437b9f78c6a4056ef0a90337f341)
DeltaFile
+1-1sys/dev/usb/wlan/if_mtwvar.h
+1-11 files

FreeBSD/src d489039sys/kern kern_malloc.c

malloc: Use ckdint.h helpers instead of WOULD_OVERFLOW

This serves to demonstrate some usage of the ckdint.h helpers.  The new
version also generates better machine code on amd64 and arm64.

Reviewed by:    kib, emaste
MFC after:      2 weeks
Sponsored by:   The FreeBSD Foundation

(cherry picked from commit 2d67765f10e7da43ba2d4a7fc074c15d5354684b)
DeltaFile
+7-5sys/kern/kern_malloc.c
+7-51 files