Commit 3798f47a authored by Sachin Prabhu's avatar Sachin Prabhu Committed by Jeff Layton

cifs: Do not lookup hashed negative dentry in cifs_atomic_open

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: default avatarVit Zahradka <vit.zahradka@tiscali.cz>
Signed-off-by: default avatarSachin Prabhu <sprabhu@redhat.com>
parent 36960e44
...@@ -398,7 +398,16 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, ...@@ -398,7 +398,16 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
* in network traffic in the other paths. * in network traffic in the other paths.
*/ */
if (!(oflags & O_CREAT)) { 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)) if (IS_ERR(res))
return PTR_ERR(res); return PTR_ERR(res);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment