Four smb client fixes

-----BEGIN PGP SIGNATURE-----
 
 iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmkWkY0ACgkQiiy9cAdy
 T1G4wAv/a9spGaseju5kVItQP1TekddFrSN09kbBCW5Yr6RYrlXrvlZKVA5RI/4j
 AsJmoY7Fbve3m2IdW+Ctc6sdDdPdSHc+dhBilrFwTmsXqkpbvrL+Bmn2b2pq44pC
 smOP+8ebcK9TLYQ+cBChyAQm/v6/abx6C2XnXpLMOEw1ocDBMAvjZneOEXwBXTA9
 bDUeqg03VkBrrBn8SM2yIFsheU1HUx6BMgxYhWFf1RTHERWyI1RVFJWsOHn3uHpf
 v2YBg3C0wsnmknpQwnO/2BTEWfXWP7/WdntdEdRBmRvxZfNnuJ3JID88oyv6GylJ
 9Wta8L9R1ekHslY07FyO9j/LY9VVQlnD/wxD3ReqGxNJA8ylfFwH/XaFw+YamGU9
 Zc1tRxVZVkllIQhHimIHyw949Ujrzzv9GkYBDJac5rEXzbV/ojAyhGwhdyfD6azL
 kZ2c7fY7DN6hKjPTAz+OZOXrde3A9wp5rqDHQNiUgbAdbvkPqvQH3zUQKLN61jcr
 SVTmNqvf
 =BOX2
 -----END PGP SIGNATURE-----

Merge tag 'v6.18-rc5-smb-client-fixes' of git://git.samba.org/sfrench/cifs-2.6

Pull smb client fixes from Steve French:

 - Multichannel reconnect channel selection fix

 - Fix for smbdirect (RDMA) disconnect bug

 - Fix for incorrect username length check

 - Fix memory leak in mount parm processing

* tag 'v6.18-rc5-smb-client-fixes' of git://git.samba.org/sfrench/cifs-2.6:
  smb: client: let smbd_disconnect_rdma_connection() turn CREATED into DISCONNECTED
  smb: fix invalid username check in smb3_fs_context_parse_param()
  cifs: client: fix memory leak in smb3_fs_context_parse_param
  smb: client: fix cifs_pick_channel when channel needs reconnect
This commit is contained in:
Linus Torvalds 2025-11-14 08:30:48 -08:00
commit 95baf63fe8
3 changed files with 7 additions and 2 deletions

View file

@ -1435,12 +1435,14 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
cifs_errorf(fc, "Unknown error parsing devname\n");
goto cifs_parse_mount_err;
}
kfree(ctx->source);
ctx->source = smb3_fs_context_fullpath(ctx, '/');
if (IS_ERR(ctx->source)) {
ctx->source = NULL;
cifs_errorf(fc, "OOM when copying UNC string\n");
goto cifs_parse_mount_err;
}
kfree(fc->source);
fc->source = kstrdup(ctx->source, GFP_KERNEL);
if (fc->source == NULL) {
cifs_errorf(fc, "OOM when copying UNC string\n");
@ -1468,7 +1470,7 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
break;
}
if (strnlen(param->string, CIFS_MAX_USERNAME_LEN) >
if (strnlen(param->string, CIFS_MAX_USERNAME_LEN) ==
CIFS_MAX_USERNAME_LEN) {
pr_warn("username too long\n");
goto cifs_parse_mount_err;

View file

@ -290,6 +290,9 @@ static void smbd_disconnect_rdma_connection(struct smbdirect_socket *sc)
break;
case SMBDIRECT_SOCKET_CREATED:
sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
break;
case SMBDIRECT_SOCKET_CONNECTED:
sc->status = SMBDIRECT_SOCKET_ERROR;
break;

View file

@ -830,7 +830,7 @@ struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses)
if (!server || server->terminate)
continue;
if (CIFS_CHAN_NEEDS_RECONNECT(ses, i))
if (CIFS_CHAN_NEEDS_RECONNECT(ses, cur))
continue;
/*