]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
Added missing Xen Kernel Patches which where ignored because of
authorBen Schweikert <trikolon@ipfire.org>
Wed, 9 Sep 2009 15:30:18 +0000 (17:30 +0200)
committerBen Schweikert <trikolon@ipfire.org>
Wed, 9 Sep 2009 15:30:18 +0000 (17:30 +0200)
the .diff ending.

src/patches/suse-2.6.27.31/patches.apparmor/vfs-unlink.diff [new file with mode: 0644]

diff --git a/src/patches/suse-2.6.27.31/patches.apparmor/vfs-unlink.diff b/src/patches/suse-2.6.27.31/patches.apparmor/vfs-unlink.diff
new file mode 100644 (file)
index 0000000..cbf092a
--- /dev/null
@@ -0,0 +1,99 @@
+From: Tony Jones <tonyj@suse.de>
+Subject: Add a struct vfsmount parameter to vfs_unlink()
+
+The vfsmount will be passed down to the LSM hook so that LSMs can compute
+pathnames.
+
+Signed-off-by: Tony Jones <tonyj@suse.de>
+Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
+Signed-off-by: John Johansen <jjohansen@suse.de>
+
+---
+ fs/ecryptfs/inode.c   |    3 ++-
+ fs/namei.c            |    4 ++--
+ fs/nfsd/nfs4recover.c |    2 +-
+ fs/nfsd/vfs.c         |    2 +-
+ include/linux/fs.h    |    2 +-
+ ipc/mqueue.c          |    2 +-
+ 6 files changed, 8 insertions(+), 7 deletions(-)
+
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -445,11 +445,12 @@ static int ecryptfs_unlink(struct inode
+ {
+       int rc = 0;
+       struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
++      struct vfsmount *lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
+       struct inode *lower_dir_inode = ecryptfs_inode_to_lower(dir);
+       struct dentry *lower_dir_dentry;
+       lower_dir_dentry = lock_parent(lower_dentry);
+-      rc = vfs_unlink(lower_dir_inode, lower_dentry);
++      rc = vfs_unlink(lower_dir_inode, lower_dentry, lower_mnt);
+       if (rc) {
+               printk(KERN_ERR "Error in vfs_unlink; rc = [%d]\n", rc);
+               goto out_unlock;
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -2248,7 +2248,7 @@ SYSCALL_DEFINE1(rmdir, const char __user
+       return do_rmdir(AT_FDCWD, pathname);
+ }
+-int vfs_unlink(struct inode *dir, struct dentry *dentry)
++int vfs_unlink(struct inode *dir, struct dentry *dentry, struct vfsmount *mnt)
+ {
+       int error = may_delete(dir, dentry, 0);
+@@ -2313,7 +2313,7 @@ static long do_unlinkat(int dfd, const c
+               error = mnt_want_write(nd.path.mnt);
+               if (error)
+                       goto exit2;
+-              error = vfs_unlink(nd.path.dentry->d_inode, dentry);
++              error = vfs_unlink(nd.path.dentry->d_inode, dentry, nd.path.mnt);
+               mnt_drop_write(nd.path.mnt);
+       exit2:
+               dput(dentry);
+--- a/fs/nfsd/nfs4recover.c
++++ b/fs/nfsd/nfs4recover.c
+@@ -264,7 +264,7 @@ nfsd4_remove_clid_file(struct dentry *di
+               return -EINVAL;
+       }
+       mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
+-      status = vfs_unlink(dir->d_inode, dentry);
++      status = vfs_unlink(dir->d_inode, dentry, rec_dir.path.mnt);
+       mutex_unlock(&dir->d_inode->i_mutex);
+       return status;
+ }
+--- a/fs/nfsd/vfs.c
++++ b/fs/nfsd/vfs.c
+@@ -1832,7 +1832,7 @@ nfsd_unlink(struct svc_rqst *rqstp, stru
+                       host_err = -EPERM;
+               } else
+ #endif
+-              host_err = vfs_unlink(dirp, rdentry);
++              host_err = vfs_unlink(dirp, rdentry, exp->ex_path.mnt);
+       } else { /* It's RMDIR */
+               host_err = vfs_rmdir(dirp, rdentry, exp->ex_path.mnt);
+       }
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1183,7 +1183,7 @@ extern int vfs_mknod(struct inode *, str
+ extern int vfs_symlink(struct inode *, struct dentry *, struct vfsmount *, const char *);
+ extern int vfs_link(struct dentry *, struct vfsmount *, struct inode *, struct dentry *, struct vfsmount *);
+ extern int vfs_rmdir(struct inode *, struct dentry *, struct vfsmount *);
+-extern int vfs_unlink(struct inode *, struct dentry *);
++extern int vfs_unlink(struct inode *, struct dentry *, struct vfsmount *);
+ extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
+ /*
+--- a/ipc/mqueue.c
++++ b/ipc/mqueue.c
+@@ -746,7 +746,7 @@ SYSCALL_DEFINE1(mq_unlink, const char __
+       err = mnt_want_write(mqueue_mnt);
+       if (err)
+               goto out_err;
+-      err = vfs_unlink(dentry->d_parent->d_inode, dentry);
++      err = vfs_unlink(dentry->d_parent->d_inode, dentry, mqueue_mnt);
+       mnt_drop_write(mqueue_mnt);
+ out_err:
+       dput(dentry);