From: Al Viro <viro@zeniv.linux.org.uk>
Date: Fri, 17 Jun 2011 13:50:44 +0000 (-0400)
Subject: cifs: more breakage on mount failures
X-Git-Tag: firefly_0821_release~3680^2~5185^2~2
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fa18f1bdce898f0efd0c8639c901d826d01be04f;p=firefly-linux-kernel-4.4.55.git

cifs: more breakage on mount failures

if cifs_get_root() fails, we end up with ->mount() returning NULL,
which is not what callers expect.  Moreover, in case of superblock
reuse we end up leaking a superblock reference...

Acked-by: Pavel Shilovsky <piastryyy@gmail.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---

diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index ba2b2da360d3..234e9d08db76 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -710,19 +710,16 @@ cifs_do_mount(struct file_system_type *fs_type,
 
 	sb->s_flags |= MS_ACTIVE;
 
+out_shared:
 	root = cifs_get_root(volume_info, sb);
-	if (root == NULL)
+	if (root == NULL) {
+		root = ERR_PTR(-EINVAL); /* XXX */
 		goto out_super;
+	}
 
 	cFYI(1, "dentry root is: %p", root);
 	goto out;
 
-out_shared:
-	root = cifs_get_root(volume_info, sb);
-	if (root)
-		cFYI(1, "dentry root is: %p", root);
-	goto out;
-
 out_super:
 	deactivate_locked_super(sb);
 out: