hc
2024-02-20 e636c8d336489bf3eed5878299e6cc045bbad077
kernel/fs/overlayfs/super.c
....@@ -144,11 +144,16 @@
144144 unsigned int flags, bool weak)
145145 {
146146 struct ovl_entry *oe = dentry->d_fsdata;
147
+ struct inode *inode = d_inode_rcu(dentry);
147148 struct dentry *upper;
148149 unsigned int i;
149150 int ret = 1;
150151
151
- upper = ovl_dentry_upper(dentry);
152
+ /* Careful in RCU mode */
153
+ if (!inode)
154
+ return -ECHILD;
155
+
156
+ upper = ovl_i_dentry_upper(inode);
152157 if (upper)
153158 ret = ovl_revalidate_real(upper, flags, weak);
154159
....@@ -1887,7 +1892,7 @@
18871892 ovl_dentry_set_flag(OVL_E_CONNECTED, root);
18881893 ovl_set_upperdata(d_inode(root));
18891894 ovl_inode_init(d_inode(root), &oip, ino, fsid);
1890
- ovl_dentry_update_reval(root, upperdentry, DCACHE_OP_WEAK_REVALIDATE);
1895
+ ovl_dentry_init_flags(root, upperdentry, DCACHE_OP_WEAK_REVALIDATE);
18911896
18921897 return root;
18931898 }
....@@ -2047,7 +2052,7 @@
20472052 sb->s_xattr = ovl_xattr_handlers;
20482053 sb->s_fs_info = ofs;
20492054 sb->s_flags |= SB_POSIXACL;
2050
- sb->s_iflags |= SB_I_SKIP_SYNC;
2055
+ sb->s_iflags |= SB_I_SKIP_SYNC | SB_I_IMA_UNVERIFIABLE_SIGNATURE;
20512056
20522057 err = -ENOMEM;
20532058 root_dentry = ovl_get_root(sb, upperpath.dentry, oe);