• A
    Make sure nd->path.mnt and nd->path.dentry are always valid pointers · 7d01ef75
    Al Viro 提交于
    Initialize them in set_nameidata() and make sure that terminate_walk() clears them
    once the pointers become potentially invalid (i.e. we leave RCU mode or drop them
    in non-RCU one).  Currently we have "path_init() always initializes them and nobody
    accesses them outside of path_init()/terminate_walk() segments", which is asking
    for trouble.
    
    With that change we would have nd->path.{mnt,dentry}
    	1) always valid - NULL or pointing to currently allocated objects.
    	2) non-NULL while we are successfully walking
    	3) NULL when we are not walking at all
    	4) contributing to refcounts whenever non-NULL outside of RCU mode.
    
    Fixes: 6c6ec2b0 ("fs: add support for LOOKUP_CACHED")
    Reported-by: syzbot+c88a7030da47945a3cc3@syzkaller.appspotmail.com
    Tested-by: NChristian Brauner <christian.brauner@ubuntu.com>
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    7d01ef75
namei.c 131.4 KB