]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.apparmor/vfs-getxattr.diff
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.apparmor / vfs-getxattr.diff
CommitLineData
8f69975d
BS
1From: Tony Jones <tonyj@suse.de>
2Subject: Add a struct vfsmount parameter to vfs_getxattr()
3
4The vfsmount will be passed down to the LSM hook so that LSMs can compute
5pathnames.
6
7Signed-off-by: Tony Jones <tonyj@suse.de>
8Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
9Signed-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 *);