• 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>