Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -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);