Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/website/static/security/patches/EN-10:01/zfsvaccess.patch
18096 views
1
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
2
===================================================================
3
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (revision 200583)
4
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (working copy)
5
@@ -3981,21 +3981,33 @@ zfs_freebsd_access(ap)
6
struct thread *a_td;
7
} */ *ap;
8
{
9
+ accmode_t accmode;
10
+ int error = 0;
11
12
/*
13
- * ZFS itself only knowns about VREAD, VWRITE and VEXEC, the rest
14
- * we have to handle by calling vaccess().
15
+ * ZFS itself only knowns about VREAD, VWRITE, VEXEC and VAPPEND,
16
*/
17
- if ((ap->a_accmode & ~(VREAD|VWRITE|VEXEC)) != 0) {
18
- vnode_t *vp = ap->a_vp;
19
- znode_t *zp = VTOZ(vp);
20
- znode_phys_t *zphys = zp->z_phys;
21
+ accmode = ap->a_accmode & (VREAD|VWRITE|VEXEC|VAPPEND);
22
+ if (accmode != 0)
23
+ error = zfs_access(ap->a_vp, accmode, 0, ap->a_cred, NULL);
24
25
- return (vaccess(vp->v_type, zphys->zp_mode, zphys->zp_uid,
26
- zphys->zp_gid, ap->a_accmode, ap->a_cred, NULL));
27
+ /*
28
+ * VADMIN has to be handled by vaccess().
29
+ */
30
+ if (error == 0) {
31
+ accmode = ap->a_accmode & ~(VREAD|VWRITE|VEXEC|VAPPEND);
32
+ if (accmode != 0) {
33
+ vnode_t *vp = ap->a_vp;
34
+ znode_t *zp = VTOZ(vp);
35
+ znode_phys_t *zphys = zp->z_phys;
36
+
37
+ error = vaccess(vp->v_type, zphys->zp_mode,
38
+ zphys->zp_uid, zphys->zp_gid, accmode, ap->a_cred,
39
+ NULL);
40
+ }
41
}
42
43
- return (zfs_access(ap->a_vp, ap->a_accmode, 0, ap->a_cred, NULL));
44
+ return (error);
45
}
46
47
static int
48
Index: sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h
49
===================================================================
50
--- sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (revision 200583)
51
+++ sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (working copy)
52
@@ -304,7 +304,6 @@ typedef struct xvattr {
53
* VOP_ACCESS flags
54
*/
55
#define V_ACE_MASK 0x1 /* mask represents NFSv4 ACE permissions */
56
-#define V_APPEND 0x2 /* want to do append only check */
57
58
/*
59
* Flags for vnode operations.
60
Index: sys/cddl/compat/opensolaris/sys/vnode.h
61
===================================================================
62
--- sys/cddl/compat/opensolaris/sys/vnode.h (revision 200583)
63
+++ sys/cddl/compat/opensolaris/sys/vnode.h (working copy)
64
@@ -57,6 +57,8 @@ typedef struct vop_vector vnodeops_t;
65
66
#define v_count v_usecount
67
68
+#define V_APPEND VAPPEND
69
+
70
static __inline int
71
vn_is_readonly(vnode_t *vp)
72
{
73
74