~apparmor-dev/apparmor/2_3

« back to all changes in this revision

Viewing changes to kernel-patches/for-mainline/vfs-setxattr.diff

  • Committer: jrjohansen
  • Date: 2008-05-27 12:04:33 UTC
  • Revision ID: svn-v4:40609528-9d10-0410-9bd8-e926d5471da9:branches/2_3:1265
remove for-mainline dir from kernel patches

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
From: Tony Jones <tonyj@suse.de>
2
 
Subject: Add a struct vfsmount parameter to vfs_setxattr()
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/vfs.c         |   16 +++++++++++-----
13
 
 fs/xattr.c            |   16 ++++++++--------
14
 
 include/linux/xattr.h |    3 ++-
15
 
 3 files changed, 21 insertions(+), 14 deletions(-)
16
 
 
17
 
--- a/fs/nfsd/vfs.c
18
 
+++ b/fs/nfsd/vfs.c
19
 
@@ -426,7 +426,8 @@ static ssize_t nfsd_getxattr(struct dent
20
 
 
21
 
 #if defined(CONFIG_NFSD_V4)
22
 
 static int
23
 
-set_nfsv4_acl_one(struct dentry *dentry, struct posix_acl *pacl, char *key)
24
 
+set_nfsv4_acl_one(struct dentry *dentry, struct vfsmount *mnt,
25
 
+                 struct posix_acl *pacl, char *key)
26
 
 {
27
 
        int len;
28
 
        size_t buflen;
29
 
@@ -445,7 +446,7 @@ set_nfsv4_acl_one(struct dentry *dentry,
30
 
                goto out;
31
 
        }
32
 
 
33
 
-       error = vfs_setxattr(dentry, key, buf, len, 0);
34
 
+       error = vfs_setxattr(dentry, mnt, key, buf, len, 0);
35
 
 out:
36
 
        kfree(buf);
37
 
        return error;
38
 
@@ -458,6 +459,7 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
39
 
        __be32 error;
40
 
        int host_error;
41
 
        struct dentry *dentry;
42
 
+       struct vfsmount *mnt;
43
 
        struct inode *inode;
44
 
        struct posix_acl *pacl = NULL, *dpacl = NULL;
45
 
        unsigned int flags = 0;
46
 
@@ -468,6 +470,7 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
47
 
                return error;
48
 
 
49
 
        dentry = fhp->fh_dentry;
50
 
+       mnt = fhp->fh_export->ex_mnt;
51
 
        inode = dentry->d_inode;
52
 
        if (S_ISDIR(inode->i_mode))
53
 
                flags = NFS4_ACL_DIR;
54
 
@@ -478,12 +481,14 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
55
 
        } else if (host_error < 0)
56
 
                goto out_nfserr;
57
 
 
58
 
-       host_error = set_nfsv4_acl_one(dentry, pacl, POSIX_ACL_XATTR_ACCESS);
59
 
+       host_error = set_nfsv4_acl_one(dentry, mnt, pacl,
60
 
+                                      POSIX_ACL_XATTR_ACCESS);
61
 
        if (host_error < 0)
62
 
                goto out_release;
63
 
 
64
 
        if (S_ISDIR(inode->i_mode))
65
 
-               host_error = set_nfsv4_acl_one(dentry, dpacl, POSIX_ACL_XATTR_DEFAULT);
66
 
+               host_error = set_nfsv4_acl_one(dentry, mnt, dpacl,
67
 
+                                              POSIX_ACL_XATTR_DEFAULT);
68
 
 
69
 
 out_release:
70
 
        posix_acl_release(pacl);
71
 
@@ -2041,7 +2046,8 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i
72
 
                size = 0;
73
 
 
74
 
        if (size)
75
 
-               error = vfs_setxattr(fhp->fh_dentry, name, value, size, 0);
76
 
+               error = vfs_setxattr(fhp->fh_dentry, fhp->fh_export->ex_mnt,
77
 
+                                    name, value, size,0);
78
 
        else {
79
 
                if (!S_ISDIR(inode->i_mode) && type == ACL_TYPE_DEFAULT)
80
 
                        error = 0;
81
 
--- a/fs/xattr.c
82
 
+++ b/fs/xattr.c
83
 
@@ -68,8 +68,8 @@ xattr_permission(struct inode *inode, co
84
 
 }
85
 
 
86
 
 int
87
 
-vfs_setxattr(struct dentry *dentry, char *name, void *value,
88
 
-               size_t size, int flags)
89
 
+vfs_setxattr(struct dentry *dentry, struct vfsmount *mnt, char *name,
90
 
+            void *value, size_t size, int flags)
91
 
 {
92
 
        struct inode *inode = dentry->d_inode;
93
 
        int error;
94
 
@@ -192,8 +192,8 @@ EXPORT_SYMBOL_GPL(vfs_removexattr);
95
 
  * Extended attribute SET operations
96
 
  */
97
 
 static long
98
 
-setxattr(struct dentry *d, char __user *name, void __user *value,
99
 
-        size_t size, int flags)
100
 
+setxattr(struct dentry *dentry, struct vfsmount *mnt, char __user *name,
101
 
+        void __user *value, size_t size, int flags)
102
 
 {
103
 
        int error;
104
 
        void *kvalue = NULL;
105
 
@@ -220,7 +220,7 @@ setxattr(struct dentry *d, char __user *
106
 
                }
107
 
        }
108
 
 
109
 
-       error = vfs_setxattr(d, kname, kvalue, size, flags);
110
 
+       error = vfs_setxattr(dentry, mnt, kname, kvalue, size, flags);
111
 
        kfree(kvalue);
112
 
        return error;
113
 
 }
114
 
@@ -235,7 +235,7 @@ sys_setxattr(char __user *path, char __u
115
 
        error = user_path_walk(path, &nd);
116
 
        if (error)
117
 
                return error;
118
 
-       error = setxattr(nd.dentry, name, value, size, flags);
119
 
+       error = setxattr(nd.dentry, nd.mnt, name, value, size, flags);
120
 
        path_release(&nd);
121
 
        return error;
122
 
 }
123
 
@@ -250,7 +250,7 @@ sys_lsetxattr(char __user *path, char __
124
 
        error = user_path_walk_link(path, &nd);
125
 
        if (error)
126
 
                return error;
127
 
-       error = setxattr(nd.dentry, name, value, size, flags);
128
 
+       error = setxattr(nd.dentry, nd.mnt, name, value, size, flags);
129
 
        path_release(&nd);
130
 
        return error;
131
 
 }
132
 
@@ -268,7 +268,7 @@ sys_fsetxattr(int fd, char __user *name,
133
 
                return error;
134
 
        dentry = f->f_path.dentry;
135
 
        audit_inode(NULL, dentry);
136
 
-       error = setxattr(dentry, name, value, size, flags);
137
 
+       error = setxattr(dentry, f->f_vfsmnt, name, value, size, flags);
138
 
        fput(f);
139
 
        return error;
140
 
 }
141
 
--- a/include/linux/xattr.h
142
 
+++ b/include/linux/xattr.h
143
 
@@ -48,7 +48,8 @@ struct xattr_handler {
144
 
 
145
 
 ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t);
146
 
 ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
147
 
-int vfs_setxattr(struct dentry *, char *, void *, size_t, int);
148
 
+int vfs_setxattr(struct dentry *, struct vfsmount *, char *, void *, size_t,
149
 
+                int);
150
 
 int vfs_removexattr(struct dentry *, char *);
151
 
 
152
 
 ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);