Module Name: src Committed By: hannken Date: Wed Nov 28 09:57:59 UTC 2018
Modified Files: src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c src/tests/fs/vfs: t_unpriv.c Log Message: Add missing access check for setting va_Xtime into zfs_netbsd_setattr(). PR kern/47656 test zfs_times. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 \ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c cvs rdiff -u -r1.13 -r1.14 src/tests/fs/vfs/t_unpriv.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.32 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.33 --- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.32 Wed Nov 28 09:57:16 2018 +++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Nov 28 09:57:59 2018 @@ -5336,10 +5336,11 @@ zfs_netbsd_setattr(void *v) vnode_t *vp = ap->a_vp; vattr_t *vap = ap->a_vap; cred_t *cred = ap->a_cred; + znode_t *zp = VTOZ(vp); xvattr_t xvap; u_long fflags; uint64_t zflags; - int flags = 0; + int error, flags = 0; vattr_init_mask(vap); vap->va_mask &= ~AT_NOSET; @@ -5405,6 +5406,16 @@ zfs_netbsd_setattr(void *v) xvap.xva_xoptattrs.xoa_nodump); #undef FLAG_CHANGE } + + if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL || + vap->va_birthtime.tv_sec != VNOVAL) { + error = kauth_authorize_vnode(cred, KAUTH_VNODE_WRITE_TIMES, vp, + NULL, genfs_can_chtimes(vp, vap->va_vaflags, zp->z_uid, + cred)); + if (error) + return error; + } + return (zfs_setattr(vp, (vattr_t *)&xvap, flags, cred, NULL)); } Index: src/tests/fs/vfs/t_unpriv.c diff -u src/tests/fs/vfs/t_unpriv.c:1.13 src/tests/fs/vfs/t_unpriv.c:1.14 --- src/tests/fs/vfs/t_unpriv.c:1.13 Fri Jan 13 21:30:40 2017 +++ src/tests/fs/vfs/t_unpriv.c Wed Nov 28 09:57:59 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: t_unpriv.c,v 1.13 2017/01/13 21:30:40 christos Exp $ */ +/* $NetBSD: t_unpriv.c,v 1.14 2018/11/28 09:57:59 hannken Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -144,8 +144,6 @@ times(const atf_tc_t *tc, const char *mp rump_pub_lwproc_rfork(RUMP_RFCFDG); if (rump_sys_setuid(1) == -1) atf_tc_fail_errno("setuid"); - if (FSTYPE_ZFS(tc)) - atf_tc_expect_fail("PR kern/47656: Test known to be broken"); if (rump_sys_utimes(name, NULL) != -1 || errno != EACCES) atf_tc_fail_errno("utimes"); rump_pub_lwproc_releaselwp();