Commit 8c642d71 authored by Chris Perl's avatar Chris Perl Committed by Greg Kroah-Hartman

NFS: nfs_compare_mount_options always compare auth flavors.

[ Upstream commit 594d1644 ]

This patch removes the check from nfs_compare_mount_options to see if a
`sec' option was passed for the current mount before comparing auth
flavors and instead just always compares auth flavors.

Consider the following scenario:

You have a server with the address 192.168.1.1 and two exports /export/a
and /export/b.  The first export supports `sys' and `krb5' security, the
second just `sys'.

Assume you start with no mounts from the server.

The following results in EIOs being returned as the kernel nfs client
incorrectly thinks it can share the underlying `struct nfs_server's:

$ mkdir /tmp/{a,b}
$ sudo mount -t nfs -o vers=3,sec=krb5 192.168.1.1:/export/a /tmp/a
$ sudo mount -t nfs -o vers=3          192.168.1.1:/export/b /tmp/b
$ df >/dev/null
df: ‘/tmp/b’: Input/output error
Signed-off-by: default avatarChris Perl <cperl@janestreet.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent ad9241f2
...@@ -2409,8 +2409,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n ...@@ -2409,8 +2409,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n
goto Ebusy; goto Ebusy;
if (a->acdirmax != b->acdirmax) if (a->acdirmax != b->acdirmax)
goto Ebusy; goto Ebusy;
if (b->auth_info.flavor_len > 0 && if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
goto Ebusy; goto Ebusy;
return 1; return 1;
Ebusy: Ebusy:
......
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