namei: make sure nd->depth is always valid
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 3 Apr 2021 20:49:44 +0000 (16:49 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 7 Apr 2021 17:57:17 +0000 (13:57 -0400)
Zero it in set_nameidata() rather than in path_init().  That way
it always matches the number of valid nd->stack[] entries.
Since terminate_walk() does zero it (after having emptied the
stack), we don't need to reinitialize it in subsequent path_init().

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index 40ffb24..d38b17a 100644 (file)
@@ -581,6 +581,7 @@ static void __set_nameidata(struct nameidata *p, int dfd, struct filename *name)
 {
        struct nameidata *old = current->nameidata;
        p->stack = p->internal;
+       p->depth = 0;
        p->dfd = dfd;
        p->name = name;
        p->path.mnt = NULL;
@@ -2320,7 +2321,6 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
 
        nd->flags = flags;
        nd->state |= ND_JUMPED;
-       nd->depth = 0;
 
        nd->m_seq = __read_seqcount_begin(&mount_lock.seqcount);
        nd->r_seq = __read_seqcount_begin(&rename_lock.seqcount);