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;
        }
 }
 
        }
 
        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);