~ubuntu-branches/ubuntu/wily/apparmor/wily

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Kees Cook
  • Date: 2011-04-27 10:38:07 UTC
  • mfrom: (5.1.118 natty)
  • Revision ID: james.westby@ubuntu.com-20110427103807-ym3rhwys6o84ith0
Tags: 2.6.1-2
debian/copyright: clarify for some full organization names.

Show diffs side-by-side

added added

removed removed

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