4
4
## DP: Patch aufs to work with vserver and apparmor (Ubuntu) kernels
7
diff -urNad aufs-0+20080129~/fs/aufs/misc.c aufs-0+20080129/fs/aufs/misc.c
8
--- aufs-0+20080129~/fs/aufs/misc.c 2008-01-29 16:43:38.000000000 +0100
9
+++ aufs-0+20080129/fs/aufs/misc.c 2008-01-29 18:41:03.000000000 +0100
7
diff -urNad aufs-0+20080317~/fs/aufs/i_op.c aufs-0+20080317/fs/aufs/i_op.c
8
--- aufs-0+20080317~/fs/aufs/i_op.c 2008-03-17 14:35:02.000000000 +0100
9
+++ aufs-0+20080317/fs/aufs/i_op.c 2008-03-17 14:36:13.000000000 +0100
11
si_read_lock(sb, AuLock_FLUSH);
14
+ #if !defined(CONFIG_SECURITY_APPARMOR) || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
15
if (ia->ia_valid & ATTR_FILE) {
16
/* currently ftruncate(2) only */
19
ia->ia_file = au_h_fptr(file);
24
if ((ia->ia_valid & ATTR_SIZE)
27
di_write_unlock(dentry);
29
+ #if !defined(CONFIG_SECURITY_APPARMOR) || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
32
//ia->ia_valid |= ATTR_FILE;
33
fi_write_unlock(file);
39
diff -urNad aufs-0+20080317~/fs/aufs/misc.c aufs-0+20080317/fs/aufs/misc.c
40
--- aufs-0+20080317~/fs/aufs/misc.c 2008-03-17 14:35:02.000000000 +0100
41
+++ aufs-0+20080317/fs/aufs/misc.c 2008-03-17 14:35:07.000000000 +0100
10
42
@@ -265,8 +265,12 @@
11
43
} while (err == -EAGAIN || err == -EINTR);
20
52
vfsub_i_lock_nested(h_i, AuLsc_I_CHILD2);
21
53
err = vfsub_notify_change(h_d, ia, &vargs);
22
54
vfsub_i_unlock(h_i);
23
diff -urNad aufs-0+20080129~/fs/aufs/vfsub.c aufs-0+20080129/fs/aufs/vfsub.c
24
--- aufs-0+20080129~/fs/aufs/vfsub.c 2008-01-29 16:43:38.000000000 +0100
25
+++ aufs-0+20080129/fs/aufs/vfsub.c 2008-01-29 18:41:03.000000000 +0100
26
@@ -1075,7 +1075,11 @@
27
if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) {
28
vfsub_ignore(a->vargs);
30
+ #ifdef CONFIG_SECURITY_APPARMOR
31
+ *a->errp = notify_change(a->h_dentry, NULL, a->ia);
33
*a->errp = notify_change(a->h_dentry, a->ia);
37
au_update_fuse_h_inode(NULL, a->h_dentry); /*ignore*/
38
diff -urNad aufs-0+20080129~/fs/aufs/vfsub.h aufs-0+20080129/fs/aufs/vfsub.h
39
--- aufs-0+20080129~/fs/aufs/vfsub.h 2008-01-29 16:43:38.000000000 +0100
40
+++ aufs-0+20080129/fs/aufs/vfsub.h 2008-01-29 18:41:03.000000000 +0100
55
diff -urNad aufs-0+20080317~/fs/aufs/vfsub.c aufs-0+20080317/fs/aufs/vfsub.c
56
--- aufs-0+20080317~/fs/aufs/vfsub.c 2008-03-17 14:35:02.000000000 +0100
57
+++ aufs-0+20080317/fs/aufs/vfsub.c 2008-03-17 14:35:07.000000000 +0100
42
59
dir->i_ino, AuDLNPair(dentry), symname, mode);
45
+#ifdef CONFIG_VSERVER
62
+ #ifdef CONFIG_VSERVER
46
63
+ err = vfs_symlink(dir, dentry, symname, mode, NULL);
47
+#elif defined(CONFIG_SECURITY_APPARMOR)
64
+ #elif defined(CONFIG_SECURITY_APPARMOR)
48
65
+ err = vfs_symlink(dir, dentry, NULL, symname, mode);
50
67
err = vfs_symlink(dir, dentry, symname, mode);
53
70
/* dir inode is locked */
54
71
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
56
73
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
59
+#ifdef CONFIG_VSERVER
76
+ #ifdef CONFIG_VSERVER
60
77
+ err = vfs_mknod(dir, dentry, mode, dev, NULL);
61
+#elif defined(CONFIG_SECURITY_APPARMOR)
78
+ #elif defined(CONFIG_SECURITY_APPARMOR)
62
79
+ err = vfs_mknod(dir, dentry, NULL, mode, dev);
64
81
err = vfs_mknod(dir, dentry, mode, dev);
67
84
/* dir inode is locked */
68
85
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
73
+#ifdef CONFIG_VSERVER
91
+ #ifdef CONFIG_VSERVER
74
92
+ err = vfs_link(src_dentry, dir, dentry, NULL);
75
+#elif defined(CONFIG_SECURITY_APPARMOR)
93
+ #elif defined(CONFIG_SECURITY_APPARMOR)
76
94
+ err = vfs_link(src_dentry, NULL, dir, dentry, NULL);
78
96
err = vfs_link(src_dentry, dir, dentry);
82
100
LKTRTrace("src_i %p, dst_i %p\n",
84
102
IMustLock(src_dir);
94
112
/* dir inode is locked */
96
114
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
99
+#ifdef CONFIG_VSERVER
117
+ #ifdef CONFIG_VSERVER
100
118
+ err = vfs_mkdir(dir, dentry, mode, NULL);
101
+#elif defined(CONFIG_SECURITY_APPARMOR)
119
+ #elif defined(CONFIG_SECURITY_APPARMOR)
102
120
+ err = vfs_mkdir(dir, dentry, NULL, mode);
104
122
err = vfs_mkdir(dir, dentry, mode);
107
125
/* dir inode is locked */
108
126
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
113
+#if defined(CONFIG_VSERVER) || defined(CONFIG_SECURITY_APPARMOR)
131
+ #if defined(CONFIG_VSERVER) || defined(CONFIG_SECURITY_APPARMOR)
114
132
+ err = vfs_rmdir(dir, dentry, NULL);
116
134
err = vfs_rmdir(dir, dentry);
119
137
/* dir inode is locked */
123
141
/* vfs_unlink() locks inode */
125
+#if defined(CONFIG_VSERVER) || defined(CONFIG_SECURITY_APPARMOR)
143
+ #if defined(CONFIG_VSERVER) || defined(CONFIG_SECURITY_APPARMOR)
126
144
+ err = vfs_unlink(dir, dentry, NULL);
128
146
err = vfs_unlink(dir, dentry);
131
149
/* dir inode is locked */
151
@@ -1135,7 +1172,11 @@
152
if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) {
153
vfsub_ignore(a->vargs);
155
+ #ifdef CONFIG_SECURITY_APPARMOR
156
+ *a->errp = notify_change(a->h_dentry, NULL, a->ia);
158
*a->errp = notify_change(a->h_dentry, a->ia);
162
au_update_fuse_h_inode(NULL, a->h_dentry); /*ignore*/