FreeBSD: Ensure that zfs_getattr() initializes the va_rdev field
Otherwise the field is left uninitialized, leading to a possible kernel memory disclosure to userspace or to the network. Use the same initialization value we use in zfsctl_common_getattr(). Reported-by: KMSAN Sponsored-by: The FreeBSD Foundation Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Ed Maste <emaste@FreeBSD.org> Signed-off-by: Mark Johnston <markj@FreeBSD.org> Closes #15639
This commit is contained in:
parent
9743d09635
commit
11656234b5
|
@ -2011,6 +2011,8 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, int flags, cred_t *cr)
|
||||||
vap->va_size = zp->z_size;
|
vap->va_size = zp->z_size;
|
||||||
if (vp->v_type == VBLK || vp->v_type == VCHR)
|
if (vp->v_type == VBLK || vp->v_type == VCHR)
|
||||||
vap->va_rdev = zfs_cmpldev(rdev);
|
vap->va_rdev = zfs_cmpldev(rdev);
|
||||||
|
else
|
||||||
|
vap->va_rdev = 0;
|
||||||
vap->va_gen = zp->z_gen;
|
vap->va_gen = zp->z_gen;
|
||||||
vap->va_flags = 0; /* FreeBSD: Reset chflags(2) flags. */
|
vap->va_flags = 0; /* FreeBSD: Reset chflags(2) flags. */
|
||||||
vap->va_filerev = zp->z_seq;
|
vap->va_filerev = zp->z_seq;
|
||||||
|
|
Loading…
Reference in New Issue