Skip to content

Commit 672e426

Browse files
Chen ZhongjinMiklos Szeredi
authored andcommitted
ovl: fix use inode directly in rcu-walk mode
ovl_dentry_revalidate_common() can be called in rcu-walk mode. As document said, "in rcu-walk mode, d_parent and d_inode should not be used without care". Check inode here to protect access under rcu-walk mode. Fixes: bccece1 ("ovl: allow remote upper") Reported-and-tested-by: [email protected] Signed-off-by: Chen Zhongjin <[email protected]> Cc: <[email protected]> # v5.7 Signed-off-by: Miklos Szeredi <[email protected]>
1 parent eb70814 commit 672e426

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

fs/overlayfs/super.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,16 @@ static int ovl_dentry_revalidate_common(struct dentry *dentry,
139139
unsigned int flags, bool weak)
140140
{
141141
struct ovl_entry *oe = dentry->d_fsdata;
142+
struct inode *inode = d_inode_rcu(dentry);
142143
struct dentry *upper;
143144
unsigned int i;
144145
int ret = 1;
145146

146-
upper = ovl_dentry_upper(dentry);
147+
/* Careful in RCU mode */
148+
if (!inode)
149+
return -ECHILD;
150+
151+
upper = ovl_i_dentry_upper(inode);
147152
if (upper)
148153
ret = ovl_revalidate_real(upper, flags, weak);
149154

0 commit comments

Comments
 (0)