• David Howells's avatar
    configfs: Fix potential NULL d_inode dereference · 112fc894
    David Howells authored
    Code that does this:
    
    		if (!(d_unhashed(dentry) && dentry->d_inode)) {
    			...
    			simple_unlink(parent->d_inode, dentry);
    		}
    
    is broken because:
    
        !(d_unhashed(dentry) && dentry->d_inode)
    
    is equivalent to:
    
        !d_unhashed(dentry) || !dentry->d_inode
    
    so it is possible to get into simple_unlink() with dentry->d_inode == NULL.
    
    simple_unlink(), however, assumes dentry->d_inode cannot be NULL.
    
    I think that what was meant is this:
    
        !d_unhashed(dentry) && dentry->d_inode
    
    and that the logical-not operator or the final close-bracket was misplaced.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: Joel Becker <joel.becker@oracle.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    112fc894
inode.c 7.08 KB