Page MenuHomeFreeBSD

ufs: Avoid subobject overflow in snapshot expunge code
ClosedPublic

Authored by jrtc27 on Dec 24 2021, 4:08 PM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Jul 21, 6:30 AM
Unknown Object (File)
Fri, Jul 3, 9:08 PM
Unknown Object (File)
Fri, Jul 3, 7:26 AM
Unknown Object (File)
Fri, Jun 26, 7:48 AM
Unknown Object (File)
Jun 20 2026, 12:29 PM
Unknown Object (File)
Jun 18 2026, 9:05 PM
Unknown Object (File)
Jun 18 2026, 8:35 AM
Unknown Object (File)
Jun 18 2026, 3:38 AM
Subscribers

Details

Summary

The code here tries to be smart and zeroes out both di_db and di_ib with
a single bzero call, thereby overrunning the di_db subobject. This is
fine on most architectures, if a little dodgy. However, on CHERI, the
compiler can optionally restrict the bounds on pointers to subobjects to
just that subobject, in order to mitigate intra-object buffer overflows,
and this is enabled in CheriBSD's pure-capability kernels.

Instead, use separate bzero calls for each array, and let the compiler
optimise it as it sees fit; even if it's not generating inline zeroing
code, Clang will happily optimise two consecutive bzero's to a single
larger call.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 43583
Build 40471: arc lint + arc unit