freebsd-nq/sys/fs
Ryan Moeller 693d10a291 tmpfs: Preserve alignment of struct fid fields
On 64-bit platforms, the two short fields in `struct tmpfs_fid` are padded to
the 64-bit alignment of the long field.  This pushes the offsets of the
subsequent fields by 4 bytes and makes `struct tmpfs_fid` bigger than
`struct fid`.  `tmpfs_vptofh()` casts a `struct fid *` to `struct tmpfs_fid *`,
causing 4 bytes of adjacent memory to be overwritten when the struct fields are
set.  Through several layers of indirection and embedded structs, the adjacent
memory for one particular call to `tmpfs_vptofh()` happens to be the stack
canary for `nfsrvd_compound()`.  Half of the canary ends up being clobbered,
going unnoticed until eventually the stack check fails when `nfsrvd_compound()`
returns and a panic is triggered.

Instead of duplicating fields of `struct fid` in `struct tmpfs_fid`, narrow the
struct to cover only the unique fields for tmpfs and assert at compile time
that the struct fits in the allotted space.  This way we don't have to
replicate the offsets of `struct fid` fields, we just use them directly.

Reviewed by:	kib, mav, rmacklem
Approved by:	mav (mentor)
MFC after:	1 week
Sponsored by:	iXsystems, Inc.
Differential Revision:	https://reviews.freebsd.org/D25077
2020-06-03 09:38:51 +00:00
..
autofs Silence down a warning which should really be a debug message. 2020-04-21 13:57:51 +00:00
cd9660 Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
cuse Fine grain locking inside the cuse(3) kernel module. 2020-03-30 18:25:43 +00:00
deadfs vfs: flatten vop vectors 2019-12-16 00:06:22 +00:00
devfs Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
ext2fs Add BE architectures support. 2020-05-17 14:52:54 +00:00
fdescfs vfs: drop the mostly unused flags argument from VOP_UNLOCK 2020-01-03 22:29:58 +00:00
fifofs Call pipeselwakeup() after toggling PIPE_EOF. 2020-04-27 15:59:07 +00:00
fuse copystr(9): Move to deprecate (attempt #2) 2020-05-25 16:40:48 +00:00
mntfs Add a new "mntfs" pseudo file system which provides private device vnodes for 2020-03-06 18:41:37 +00:00
msdosfs Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
nfs Deduplicate fsid comparisons 2020-05-21 01:55:35 +00:00
nfsclient Fix NOINET6 build broken by r361575. 2020-05-28 09:52:28 +00:00
nfsserver Deduplicate fsid comparisons 2020-05-21 01:55:35 +00:00
nullfs nullfs: don't pre lock exclusive in nullfs_root 2020-03-04 19:52:00 +00:00
procfs Retire procfs-based process debugging. 2020-04-01 19:22:09 +00:00
pseudofs Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (10 of many) 2020-02-24 10:37:56 +00:00
smbfs Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
tmpfs tmpfs: Preserve alignment of struct fid fields 2020-06-03 09:38:51 +00:00
udf vfs: drop the mostly unused flags argument from VOP_UNLOCK 2020-01-03 22:29:58 +00:00
unionfs copystr(9): Move to deprecate (attempt #2) 2020-05-25 16:40:48 +00:00