aboutsummaryrefslogtreecommitdiff
path: root/share/(public-mirror)
diff options
context:
space:
mode:
authorEtienne Bonnand <etienne.bonnand@defenso.fr>2026-06-18 16:37:31 +0000
committerKyle Evans <kevans@FreeBSD.org>2026-08-18 15:47:12 +0000
commitb567434a592e1a35b20c5a39c4ccc2ea9e00601d (patch)
treed4acf6e49c9e6e6b0db19767f3f28b97cc2e56a0 /share/(public-mirror)
parentb39457bb1566912062b2df551b7b8d429b8ba0da (diff)
stand: set st_dev/st_ino in the loader's ZFS stat for veriexecHEADmain
The loader's ZFS implementation never set st_dev or st_ino in zfs_dnode_stat(). With an uninitialized struct stat, veriexec's device comparison in lib/libsecureboot/veopen.c read stack garbage and skipped the matching manifest entry, failing with a spurious "no entry" on ZFS root under UEFI Secure Boot. Rather than zeroing the device (which would break veriexec's ability to tell apart the same path on different datasets), populate st_dev and st_ino with the same intrinsic identifiers the kernel uses: - st_dev = the dataset's ds_fsid_guid (as the kernel does via dmu_objset_fsid_guid()/dsl_dataset_fsid_guid()), already read in zfs_mount_dataset() and now propagated through struct zfsmount. - st_ino = the object number resolved in zfs_lookup(), propagated through struct file (the loader's equivalent of the kernel's z_id). dev_t and ino_t are 64-bit on FreeBSD, so both are assigned directly with no hashing. A memset() at the top of zfs_dnode_stat() zeroes the remaining fields so they no longer hold stack garbage. Tested on 16.0-CURRENT (amd64), ZFS-on-GELI root: rebuilt and re-signed the EFI loader; the system boots under UEFI Secure Boot with mac_veriexec active. (boot1 segment was modified by kevans) PR: 295935 Sponsored by: Defenso Reviewed-by: kevans Pull-Request: https://github.com/freebsd/freebsd-src/pull/2271
Diffstat (limited to 'share/(public-mirror)')
0 files changed, 0 insertions, 0 deletions