summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2010-05-13 15:31:00 +0000
committertrasz <trasz@FreeBSD.org>2010-05-13 15:31:00 +0000
commitb0594437d3592f327e0de8d42a32e52b82506a96 (patch)
tree6b30a90b8f067c55bc00f4008e6e89c8c2125b0d
parent64c451d29ebd70d8ecdbcd5a0e34ff1c4d803ac6 (diff)
downloadFreeBSD-src-b0594437d3592f327e0de8d42a32e52b82506a96.zip
FreeBSD-src-b0594437d3592f327e0de8d42a32e52b82506a96.tar.gz
Add missing check to prevent local users from panicing the kernel by trying
to set malformed ACL. MFC after: 3 days
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index 225beca..2522780 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -4939,6 +4939,10 @@ zfs_freebsd_setacl(ap)
if (ap->a_aclp->acl_cnt * 2 + 6 > ACL_MAX_ENTRIES)
return (ENOSPC);
+ error = acl_nfs4_check(ap->a_aclp, ap->a_vp->v_type == VDIR);
+ if (error != 0)
+ return (error);
+
vsecattr.vsa_mask = VSA_ACE;
aclbsize = ap->a_aclp->acl_cnt * sizeof(ace_t);
vsecattr.vsa_aclentp = kmem_alloc(aclbsize, KM_SLEEP);
OpenPOWER on IntegriCloud