Skip to content

Commit 5c031f7

Browse files
pcacjropsiff
authored andcommitted
smb: client: fix krb5 mount with username option
commit 12b4c5d98cd7ca46d5035a57bcd995df614c14e1 upstream. Customer reported that some of their krb5 mounts were failing against a single server as the client was trying to mount the shares with wrong credentials. It turned out the client was reusing SMB session from first mount to try mounting the other shares, even though a different username= option had been specified to the other mounts. By using username mount option along with sec=krb5 to search for principals from keytab is supported by cifs.upcall(8) since cifs-utils-4.8. So fix this by matching username mount option in match_session() even with Kerberos. For example, the second mount below should fail with -ENOKEY as there is no 'foobar' principal in keytab (/etc/krb5.keytab). The client ends up reusing SMB session from first mount to perform the second one, which is wrong. ``` $ ktutil ktutil: add_entry -password -p testuser -k 1 -e aes256-cts Password for testuser@ZELDA.TEST: ktutil: write_kt /etc/krb5.keytab ktutil: quit $ klist -ke Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- ---------------------------------------------------------------- 1 testuser@ZELDA.TEST (aes256-cts-hmac-sha1-96) $ mount.cifs //w22-root2/scratch /mnt/1 -o sec=krb5,username=testuser $ mount.cifs //w22-root2/scratch /mnt/2 -o sec=krb5,username=foobar $ mount -t cifs | grep -Po 'username=\K\w+' testuser testuser ``` Reported-by: Oscar Santos <ossantos@redhat.com> Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org> Cc: David Howells <dhowells@redhat.com> Cc: linux-cifs@vger.kernel.org Cc: stable@vger.kernel.org Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commit 9229709ec8bf85ae7ca53aeee9aa14814cdc1bd2) Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
1 parent fe25123 commit 5c031f7

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

fs/smb/client/connect.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1922,6 +1922,10 @@ static int match_session(struct cifs_ses *ses,
19221922
case Kerberos:
19231923
if (!uid_eq(ctx->cred_uid, ses->cred_uid))
19241924
return 0;
1925+
if (strncmp(ses->user_name ?: "",
1926+
ctx->username ?: "",
1927+
CIFS_MAX_USERNAME_LEN))
1928+
return 0;
19251929
break;
19261930
case NTLMv2:
19271931
case RawNTLMSSP:

0 commit comments

Comments
 (0)