Skip to content
  • David Howells's avatar
    Infiniband: Fix potential NULL d_inode dereference · a95104fd
    David Howells authored
    
    
    Code that does this:
    
    	if (!(d_unhashed(tmp) && tmp->d_inode)) {
    		...
    		simple_unlink(parent->d_inode, tmp);
    	}
    
    is broken because:
    
    	!(d_unhashed(tmp) && tmp->d_inode)
    
    is equivalent to:
    
    	!d_unhashed(tmp) || !tmp->d_inode
    
    so it is possible to get into simple_unlink() with tmp->d_inode == NULL.
    
    simple_unlink(), however, assumes tmp->d_inode cannot be NULL.
    
    I think that what was meant is this:
    
    	!d_unhashed(tmp) && tmp->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: Bryan O'Sullivan <bos@pathscale.com>
    cc: Roland Dreier <rolandd@cisco.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    a95104fd