]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.apparmor/vfs-getxattr.diff
Revert "Disable build of xen kernel."
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.apparmor / vfs-getxattr.diff
1 From: Tony Jones <tonyj@suse.de>
2 Subject: Add a struct vfsmount parameter to vfs_getxattr()
3
4 The vfsmount will be passed down to the LSM hook so that LSMs can compute
5 pathnames.
6
7 Signed-off-by: Tony Jones <tonyj@suse.de>
8 Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
9 Signed-off-by: John Johansen <jjohansen@suse.de>
10
11 ---
12 fs/nfsd/nfs4xdr.c | 2 +-
13 fs/nfsd/vfs.c | 21 ++++++++++++---------
14 fs/xattr.c | 15 ++++++++-------
15 include/linux/nfsd/nfsd.h | 3 ++-
16 include/linux/xattr.h | 2 +-
17 5 files changed, 24 insertions(+), 19 deletions(-)
18
19 --- a/fs/nfsd/nfs4xdr.c
20 +++ b/fs/nfsd/nfs4xdr.c
21 @@ -1446,7 +1446,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, s
22 }
23 if (bmval0 & (FATTR4_WORD0_ACL | FATTR4_WORD0_ACLSUPPORT
24 | FATTR4_WORD0_SUPPORTED_ATTRS)) {
25 - err = nfsd4_get_nfs4_acl(rqstp, dentry, &acl);
26 + err = nfsd4_get_nfs4_acl(rqstp, dentry, exp->ex_path.mnt, &acl);
27 aclsupport = (err == 0);
28 if (bmval0 & FATTR4_WORD0_ACL) {
29 if (err == -EOPNOTSUPP)
30 --- a/fs/nfsd/vfs.c
31 +++ b/fs/nfsd/vfs.c
32 @@ -420,11 +420,12 @@ out_nfserr:
33 #if defined(CONFIG_NFSD_V2_ACL) || \
34 defined(CONFIG_NFSD_V3_ACL) || \
35 defined(CONFIG_NFSD_V4)
36 -static ssize_t nfsd_getxattr(struct dentry *dentry, char *key, void **buf)
37 +static ssize_t nfsd_getxattr(struct dentry *dentry, struct vfsmount *mnt,
38 + char *key, void **buf)
39 {
40 ssize_t buflen;
41
42 - buflen = vfs_getxattr(dentry, key, NULL, 0);
43 + buflen = vfs_getxattr(dentry, mnt, key, NULL, 0);
44 if (buflen <= 0)
45 return buflen;
46
47 @@ -432,7 +433,7 @@ static ssize_t nfsd_getxattr(struct dent
48 if (!*buf)
49 return -ENOMEM;
50
51 - return vfs_getxattr(dentry, key, *buf, buflen);
52 + return vfs_getxattr(dentry, mnt, key, *buf, buflen);
53 }
54 #endif
55
56 @@ -513,13 +514,13 @@ out_nfserr:
57 }
58
59 static struct posix_acl *
60 -_get_posix_acl(struct dentry *dentry, char *key)
61 +_get_posix_acl(struct dentry *dentry, struct vfsmount *mnt, char *key)
62 {
63 void *buf = NULL;
64 struct posix_acl *pacl = NULL;
65 int buflen;
66
67 - buflen = nfsd_getxattr(dentry, key, &buf);
68 + buflen = nfsd_getxattr(dentry, mnt, key, &buf);
69 if (!buflen)
70 buflen = -ENODATA;
71 if (buflen <= 0)
72 @@ -531,14 +532,15 @@ _get_posix_acl(struct dentry *dentry, ch
73 }
74
75 int
76 -nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry, struct nfs4_acl **acl)
77 +nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry,
78 + struct vfsmount *mnt, struct nfs4_acl **acl)
79 {
80 struct inode *inode = dentry->d_inode;
81 int error = 0;
82 struct posix_acl *pacl = NULL, *dpacl = NULL;
83 unsigned int flags = 0;
84
85 - pacl = _get_posix_acl(dentry, POSIX_ACL_XATTR_ACCESS);
86 + pacl = _get_posix_acl(dentry, mnt, POSIX_ACL_XATTR_ACCESS);
87 if (IS_ERR(pacl) && PTR_ERR(pacl) == -ENODATA)
88 pacl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL);
89 if (IS_ERR(pacl)) {
90 @@ -548,7 +550,7 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqst
91 }
92
93 if (S_ISDIR(inode->i_mode)) {
94 - dpacl = _get_posix_acl(dentry, POSIX_ACL_XATTR_DEFAULT);
95 + dpacl = _get_posix_acl(dentry, mnt, POSIX_ACL_XATTR_DEFAULT);
96 if (IS_ERR(dpacl) && PTR_ERR(dpacl) == -ENODATA)
97 dpacl = NULL;
98 else if (IS_ERR(dpacl)) {
99 @@ -2080,7 +2082,8 @@ nfsd_get_posix_acl(struct svc_fh *fhp, i
100 return ERR_PTR(-EOPNOTSUPP);
101 }
102
103 - size = nfsd_getxattr(fhp->fh_dentry, name, &value);
104 + size = nfsd_getxattr(fhp->fh_dentry, fhp->fh_export->ex_path.mnt, name,
105 + &value);
106 if (size < 0)
107 return ERR_PTR(size);
108
109 --- a/fs/xattr.c
110 +++ b/fs/xattr.c
111 @@ -131,7 +131,8 @@ out_noalloc:
112 EXPORT_SYMBOL_GPL(xattr_getsecurity);
113
114 ssize_t
115 -vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
116 +vfs_getxattr(struct dentry *dentry, struct vfsmount *mnt, const char *name,
117 + void *value, size_t size)
118 {
119 struct inode *inode = dentry->d_inode;
120 int error;
121 @@ -314,8 +315,8 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, cons
122 * Extended attribute GET operations
123 */
124 static ssize_t
125 -getxattr(struct dentry *d, const char __user *name, void __user *value,
126 - size_t size)
127 +getxattr(struct dentry *dentry, struct vfsmount *mnt, const char __user *name,
128 + void __user *value, size_t size)
129 {
130 ssize_t error;
131 void *kvalue = NULL;
132 @@ -335,7 +336,7 @@ getxattr(struct dentry *d, const char __
133 return -ENOMEM;
134 }
135
136 - error = vfs_getxattr(d, kname, kvalue, size);
137 + error = vfs_getxattr(dentry, mnt, kname, kvalue, size);
138 if (error > 0) {
139 if (size && copy_to_user(value, kvalue, error))
140 error = -EFAULT;
141 @@ -357,7 +358,7 @@ SYSCALL_DEFINE4(getxattr, const char __u
142 error = user_path(pathname, &path);
143 if (error)
144 return error;
145 - error = getxattr(path.dentry, name, value, size);
146 + error = getxattr(path.dentry, path.mnt, name, value, size);
147 path_put(&path);
148 return error;
149 }
150 @@ -371,7 +372,7 @@ SYSCALL_DEFINE4(lgetxattr, const char __
151 error = user_lpath(pathname, &path);
152 if (error)
153 return error;
154 - error = getxattr(path.dentry, name, value, size);
155 + error = getxattr(path.dentry, path.mnt, name, value, size);
156 path_put(&path);
157 return error;
158 }
159 @@ -386,7 +387,7 @@ SYSCALL_DEFINE4(fgetxattr, int, fd, cons
160 if (!f)
161 return error;
162 audit_inode(NULL, f->f_path.dentry);
163 - error = getxattr(f->f_path.dentry, name, value, size);
164 + error = getxattr(f->f_path.dentry, f->f_path.mnt, name, value, size);
165 fput(f);
166 return error;
167 }
168 --- a/include/linux/nfsd/nfsd.h
169 +++ b/include/linux/nfsd/nfsd.h
170 @@ -85,7 +85,8 @@ __be32 nfsd_setattr(struct svc_rqst *,
171 #ifdef CONFIG_NFSD_V4
172 __be32 nfsd4_set_nfs4_acl(struct svc_rqst *, struct svc_fh *,
173 struct nfs4_acl *);
174 -int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *, struct nfs4_acl **);
175 +int nfsd4_get_nfs4_acl(struct svc_rqst *, struct dentry *,
176 + struct vfsmount *mnt, struct nfs4_acl **);
177 #endif /* CONFIG_NFSD_V4 */
178 __be32 nfsd_create(struct svc_rqst *, struct svc_fh *,
179 char *name, int len, struct iattr *attrs,
180 --- a/include/linux/xattr.h
181 +++ b/include/linux/xattr.h
182 @@ -48,7 +48,7 @@ struct xattr_handler {
183 };
184
185 ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
186 -ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
187 +ssize_t vfs_getxattr(struct dentry *, struct vfsmount *, const char *, void *, size_t);
188 ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
189 int vfs_setxattr(struct dentry *, struct vfsmount *, const char *, const void *, size_t, int);
190 int vfs_removexattr(struct dentry *, const char *);