]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.apparmor/vfs-mknod.diff
Changed checkfs to auto reboot after correctable fsck fixes.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.apparmor / vfs-mknod.diff
1 From: Tony Jones <tonyj@suse.de>
2 Subject: Add a struct vfsmount parameter to vfs_mknod()
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/ecryptfs/inode.c | 5 ++++-
13 fs/namei.c | 10 ++++++----
14 fs/nfsd/vfs.c | 3 ++-
15 include/linux/fs.h | 2 +-
16 net/unix/af_unix.c | 3 ++-
17 5 files changed, 15 insertions(+), 8 deletions(-)
18
19 --- a/fs/ecryptfs/inode.c
20 +++ b/fs/ecryptfs/inode.c
21 @@ -552,11 +552,14 @@ ecryptfs_mknod(struct inode *dir, struct
22 {
23 int rc;
24 struct dentry *lower_dentry;
25 + struct vfsmount *lower_mnt;
26 struct dentry *lower_dir_dentry;
27
28 lower_dentry = ecryptfs_dentry_to_lower(dentry);
29 + lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
30 lower_dir_dentry = lock_parent(lower_dentry);
31 - rc = vfs_mknod(lower_dir_dentry->d_inode, lower_dentry, mode, dev);
32 + rc = vfs_mknod(lower_dir_dentry->d_inode, lower_dentry, lower_mnt, mode,
33 + dev);
34 if (rc || !lower_dentry->d_inode)
35 goto out;
36 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb, 0);
37 --- a/fs/namei.c
38 +++ b/fs/namei.c
39 @@ -1976,7 +1976,8 @@ fail:
40 }
41 EXPORT_SYMBOL_GPL(lookup_create);
42
43 -int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
44 +int vfs_mknod(struct inode *dir, struct dentry *dentry, struct vfsmount *mnt,
45 + int mode, dev_t dev)
46 {
47 int error = may_create(dir, dentry, 0);
48
49 @@ -2054,11 +2055,12 @@ SYSCALL_DEFINE4(mknodat, int, dfd, const
50 error = vfs_create(nd.path.dentry->d_inode,dentry,mode,&nd);
51 break;
52 case S_IFCHR: case S_IFBLK:
53 - error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode,
54 - new_decode_dev(dev));
55 + error = vfs_mknod(nd.path.dentry->d_inode, dentry,
56 + nd.path, mode, new_decode_dev(dev));
57 break;
58 case S_IFIFO: case S_IFSOCK:
59 - error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode,0);
60 + error = vfs_mknod(nd.path.dentry->d_inode, dentry,
61 + nd.path, mode, 0);
62 break;
63 }
64 mnt_drop_write(nd.path.mnt);
65 --- a/fs/nfsd/vfs.c
66 +++ b/fs/nfsd/vfs.c
67 @@ -1306,7 +1306,8 @@ nfsd_create(struct svc_rqst *rqstp, stru
68 case S_IFBLK:
69 case S_IFIFO:
70 case S_IFSOCK:
71 - host_err = vfs_mknod(dirp, dchild, iap->ia_mode, rdev);
72 + host_err = vfs_mknod(dirp, dchild, exp->ex_path.mnt,
73 + iap->ia_mode, rdev);
74 break;
75 }
76 if (host_err < 0) {
77 --- a/include/linux/fs.h
78 +++ b/include/linux/fs.h
79 @@ -1179,7 +1179,7 @@ extern void unlock_super(struct super_bl
80 extern int vfs_permission(struct nameidata *, int);
81 extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *);
82 extern int vfs_mkdir(struct inode *, struct dentry *, struct vfsmount *, int);
83 -extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
84 +extern int vfs_mknod(struct inode *, struct dentry *, struct vfsmount *, int, dev_t);
85 extern int vfs_symlink(struct inode *, struct dentry *, const char *);
86 extern int vfs_link(struct dentry *, struct inode *, struct dentry *);
87 extern int vfs_rmdir(struct inode *, struct dentry *);
88 --- a/net/unix/af_unix.c
89 +++ b/net/unix/af_unix.c
90 @@ -827,7 +827,8 @@ static int unix_bind(struct socket *sock
91 err = mnt_want_write(nd.path.mnt);
92 if (err)
93 goto out_mknod_dput;
94 - err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, 0);
95 + err = vfs_mknod(nd.path.dentry->d_inode, dentry, nd.path.mnt,
96 + mode, 0);
97 mnt_drop_write(nd.path.mnt);
98 if (err)
99 goto out_mknod_dput;