Skip to content

Commit

Permalink
cifs: Do not lookup hashed negative dentry in cifs_atomic_open
Browse files Browse the repository at this point in the history
We do not need to lookup a hashed negative directory since we have
already revalidated it before and have found it to be fine.

This also prevents a crash in cifs_lookup() when it attempts to rehash
the already hashed negative lookup dentry.

The patch has been tested using the reproducer at
https://bugzilla.redhat.com/show_bug.cgi?id=867344#c28

Cc: <stable@kernel.org> # 3.6.x
Reported-by: Vit Zahradka <vit.zahradka@tiscali.cz>
Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
  • Loading branch information
Sachin Prabhu authored and Jeff Layton committed Nov 5, 2012
1 parent 36960e4 commit 3798f47
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion fs/cifs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,16 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
* in network traffic in the other paths.
*/
if (!(oflags & O_CREAT)) {
struct dentry *res = cifs_lookup(inode, direntry, 0);
struct dentry *res;

/*
* Check for hashed negative dentry. We have already revalidated
* the dentry and it is fine. No need to perform another lookup.
*/
if (!d_unhashed(direntry))
return -ENOENT;

res = cifs_lookup(inode, direntry, 0);
if (IS_ERR(res))
return PTR_ERR(res);

Expand Down

0 comments on commit 3798f47

Please sign in to comment.