mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-05 16:55:32 +00:00
104 lines
3.4 KiB
Diff
104 lines
3.4 KiB
Diff
![]() |
Add a struct vfsmount parameter to vfs_setxattr()
|
||
|
|
||
|
Signed-off-by: Tony Jones <tonyj@suse.de>
|
||
|
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
|
||
|
|
||
|
Index: linux-2.6.19/fs/nfsd/vfs.c
|
||
|
===================================================================
|
||
|
--- linux-2.6.19.orig/fs/nfsd/vfs.c
|
||
|
+++ linux-2.6.19/fs/nfsd/vfs.c
|
||
|
@@ -416,7 +416,7 @@ set_nfsv4_acl_one(struct dentry *dentry,
|
||
|
goto out;
|
||
|
}
|
||
|
|
||
|
- error = vfs_setxattr(dentry, key, buf, len, 0);
|
||
|
+ error = vfs_setxattr(NULL, dentry, key, buf, len, 0);
|
||
|
out:
|
||
|
kfree(buf);
|
||
|
return error;
|
||
|
@@ -1981,7 +1981,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i
|
||
|
size = 0;
|
||
|
|
||
|
if (size)
|
||
|
- error = vfs_setxattr(fhp->fh_dentry, name, value, size, 0);
|
||
|
+ error = vfs_setxattr(NULL, fhp->fh_dentry, name, value, size,0);
|
||
|
else {
|
||
|
if (!S_ISDIR(inode->i_mode) && type == ACL_TYPE_DEFAULT)
|
||
|
error = 0;
|
||
|
Index: linux-2.6.19/fs/xattr.c
|
||
|
===================================================================
|
||
|
--- linux-2.6.19.orig/fs/xattr.c
|
||
|
+++ linux-2.6.19/fs/xattr.c
|
||
|
@@ -70,8 +70,8 @@ xattr_permission(struct inode *inode, co
|
||
|
}
|
||
|
|
||
|
int
|
||
|
-vfs_setxattr(struct dentry *dentry, char *name, void *value,
|
||
|
- size_t size, int flags)
|
||
|
+vfs_setxattr(struct vfsmount *mnt, struct dentry *dentry, char *name,
|
||
|
+ void *value, size_t size, int flags)
|
||
|
{
|
||
|
struct inode *inode = dentry->d_inode;
|
||
|
int error;
|
||
|
@@ -194,8 +194,8 @@ EXPORT_SYMBOL_GPL(vfs_removexattr);
|
||
|
* Extended attribute SET operations
|
||
|
*/
|
||
|
static long
|
||
|
-setxattr(struct dentry *d, char __user *name, void __user *value,
|
||
|
- size_t size, int flags)
|
||
|
+setxattr(struct vfsmount *mnt, struct dentry *dentry, char __user *name,
|
||
|
+ void __user *value, size_t size, int flags)
|
||
|
{
|
||
|
int error;
|
||
|
void *kvalue = NULL;
|
||
|
@@ -222,7 +222,7 @@ setxattr(struct dentry *d, char __user *
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- error = vfs_setxattr(d, kname, kvalue, size, flags);
|
||
|
+ error = vfs_setxattr(mnt, dentry, kname, kvalue, size, flags);
|
||
|
kfree(kvalue);
|
||
|
return error;
|
||
|
}
|
||
|
@@ -237,7 +237,7 @@ sys_setxattr(char __user *path, char __u
|
||
|
error = user_path_walk(path, &nd);
|
||
|
if (error)
|
||
|
return error;
|
||
|
- error = setxattr(nd.dentry, name, value, size, flags);
|
||
|
+ error = setxattr(nd.mnt, nd.dentry, name, value, size, flags);
|
||
|
path_release(&nd);
|
||
|
return error;
|
||
|
}
|
||
|
@@ -252,7 +252,7 @@ sys_lsetxattr(char __user *path, char __
|
||
|
error = user_path_walk_link(path, &nd);
|
||
|
if (error)
|
||
|
return error;
|
||
|
- error = setxattr(nd.dentry, name, value, size, flags);
|
||
|
+ error = setxattr(nd.mnt, nd.dentry, name, value, size, flags);
|
||
|
path_release(&nd);
|
||
|
return error;
|
||
|
}
|
||
|
@@ -270,7 +270,7 @@ sys_fsetxattr(int fd, char __user *name,
|
||
|
return error;
|
||
|
dentry = f->f_dentry;
|
||
|
audit_inode(NULL, dentry->d_inode);
|
||
|
- error = setxattr(dentry, name, value, size, flags);
|
||
|
+ error = setxattr(f->f_vfsmnt, dentry, name, value, size, flags);
|
||
|
fput(f);
|
||
|
return error;
|
||
|
}
|
||
|
Index: linux-2.6.19/include/linux/xattr.h
|
||
|
===================================================================
|
||
|
--- linux-2.6.19.orig/include/linux/xattr.h
|
||
|
+++ linux-2.6.19/include/linux/xattr.h
|
||
|
@@ -42,7 +42,8 @@ struct xattr_handler {
|
||
|
|
||
|
ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t);
|
||
|
ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
|
||
|
-int vfs_setxattr(struct dentry *, char *, void *, size_t, int);
|
||
|
+int vfs_setxattr(struct vfsmount *, struct dentry *, char *, void *, size_t,
|
||
|
+ int);
|
||
|
int vfs_removexattr(struct dentry *, char *);
|
||
|
|
||
|
ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);
|