mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	smb: client: allocate crypto only for primary server
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>
			
			
This commit is contained in:
		
							parent
							
								
									b0abcd65ec
								
							
						
					
					
						commit
						f7025d8616
					
				
					 2 changed files with 18 additions and 9 deletions
				
			
		| 
						 | 
					@ -735,6 +735,7 @@ cifs_crypto_secmech_release(struct TCP_Server_Info *server)
 | 
				
			||||||
	cifs_free_hash(&server->secmech.sha512);
 | 
						cifs_free_hash(&server->secmech.sha512);
 | 
				
			||||||
	cifs_free_hash(&server->secmech.hmacmd5);
 | 
						cifs_free_hash(&server->secmech.hmacmd5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!SERVER_IS_CHAN(server)) {
 | 
				
			||||||
		if (server->secmech.enc) {
 | 
							if (server->secmech.enc) {
 | 
				
			||||||
			crypto_free_aead(server->secmech.enc);
 | 
								crypto_free_aead(server->secmech.enc);
 | 
				
			||||||
			server->secmech.enc = NULL;
 | 
								server->secmech.enc = NULL;
 | 
				
			||||||
| 
						 | 
					@ -744,4 +745,8 @@ cifs_crypto_secmech_release(struct TCP_Server_Info *server)
 | 
				
			||||||
			crypto_free_aead(server->secmech.dec);
 | 
								crypto_free_aead(server->secmech.dec);
 | 
				
			||||||
			server->secmech.dec = NULL;
 | 
								server->secmech.dec = NULL;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							server->secmech.enc = NULL;
 | 
				
			||||||
 | 
							server->secmech.dec = NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1268,9 +1268,13 @@ SMB2_negotiate(const unsigned int xid,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (server->cipher_type && !rc) {
 | 
						if (server->cipher_type && !rc) {
 | 
				
			||||||
 | 
							if (!SERVER_IS_CHAN(server)) {
 | 
				
			||||||
			rc = smb3_crypto_aead_allocate(server);
 | 
								rc = smb3_crypto_aead_allocate(server);
 | 
				
			||||||
		if (rc)
 | 
							} else {
 | 
				
			||||||
			cifs_server_dbg(VFS, "%s: crypto alloc failed, rc=%d\n", __func__, rc);
 | 
								/* 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:
 | 
					neg_exit:
 | 
				
			||||||
	free_rsp_buf(resp_buftype, rsp);
 | 
						free_rsp_buf(resp_buftype, rsp);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue