[Devel] [PATCH rh7] fs/namei.c: return error if nd->inode check is empty in handle_dotdot_rcu()
    Vasily Averin 
    vvs at virtuozzo.com
       
    Mon Nov 29 08:48:49 MSK 2021
    
    
  
LOOKUP_RCU does not use dget/dput and have no protection agains
concurrent rmdir. On the other hand may_lookup() exepct that nd->inode
is not empty. Direct lookup guarantees this, non-RCU dotdot lookup
is not affected too because it uses dget. However follow_dotdot_rcu()
does not have a similar check.
This patch should prevent oops in may_lookup() in described scenario.
The problem was fixed in upstream long time ago, however it's too hard
to backport all f according patches correctly. So let's use minially
required change to protect vz7 kernels.
https://jira.sw.ru/browse/PSBM-92308
https://jira.sw.ru/browse/PSBM-128194
https://jira.sw.ru/browse/PSBM-136369
Signed-off-by: Vasily Averin <vvs at virtuozzo.com>
---
 fs/namei.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/namei.c b/fs/namei.c
index 85c0ffa0c55c..869839ea2112 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1223,7 +1223,8 @@ static int follow_dotdot_rcu(struct nameidata *nd)
 			goto failed;
 	}
 	nd->inode = nd->path.dentry->d_inode;
-	return 0;
+	if (nd->inode)
+		return 0;
 
 failed:
 	nd->flags &= ~LOOKUP_RCU;
-- 
2.25.1
    
    
More information about the Devel
mailing list