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();

Reply via email to