]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
smb: client: allocate crypto only for primary server
authorEnzo Matsumiya <ematsumiya@suse.de>
Thu, 26 Sep 2024 17:46:14 +0000 (14:46 -0300)
committerSteve French <stfrench@microsoft.com>
Thu, 26 Sep 2024 23:15:02 +0000 (18:15 -0500)
For extra channels, point ->secmech.{enc,dec} to the primary
server ones.

Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/cifsencrypt.c
fs/smb/client/smb2pdu.c

index 7481b21a048982370f1582020e36bae9b9971b83..15aa75e7f1c3d5fd0e33e5caadae3b8388c27a89 100644 (file)
@@ -735,13 +735,18 @@ cifs_crypto_secmech_release(struct TCP_Server_Info *server)
        cifs_free_hash(&server->secmech.sha512);
        cifs_free_hash(&server->secmech.hmacmd5);
 
-       if (server->secmech.enc) {
-               crypto_free_aead(server->secmech.enc);
-               server->secmech.enc = NULL;
-       }
+       if (!SERVER_IS_CHAN(server)) {
+               if (server->secmech.enc) {
+                       crypto_free_aead(server->secmech.enc);
+                       server->secmech.enc = NULL;
+               }
 
-       if (server->secmech.dec) {
-               crypto_free_aead(server->secmech.dec);
+               if (server->secmech.dec) {
+                       crypto_free_aead(server->secmech.dec);
+                       server->secmech.dec = NULL;
+               }
+       } else {
+               server->secmech.enc = NULL;
                server->secmech.dec = NULL;
        }
 }
index cb423bfe7377a27fe68bbf4cc19f5300cd05b659..02828b9c3cb32abe5f06c0080cbde82c096f8ac4 100644 (file)
@@ -1268,9 +1268,13 @@ SMB2_negotiate(const unsigned int xid,
        }
 
        if (server->cipher_type && !rc) {
-               rc = smb3_crypto_aead_allocate(server);
-               if (rc)
-                       cifs_server_dbg(VFS, "%s: crypto alloc failed, rc=%d\n", __func__, rc);
+               if (!SERVER_IS_CHAN(server)) {
+                       rc = smb3_crypto_aead_allocate(server);
+               } else {
+                       /* For channels, just reuse the primary server crypto secmech. */
+                       server->secmech.enc = server->primary_server->secmech.enc;
+                       server->secmech.dec = server->primary_server->secmech.dec;
+               }
        }
 neg_exit:
        free_rsp_buf(resp_buftype, rsp);