reviewed by me On Sat, 17 Sept 2022 at 09:57, Enzo Matsumiya <ematsumiya@xxxxxxx> wrote: > > If an error happens while getting the key or session in the > ->calc_signature implementations, 0 (success) is returned. Fix it by > returning a proper error code. > > Since it seems to be highly unlikely to happen wrap the rc check in > unlikely() too. > > Fixes: 32811d242ff6 ("cifs: Start using per session key for smb2/3 for signature generation") > Signed-off-by: Enzo Matsumiya <ematsumiya@xxxxxxx> > --- > fs/cifs/smb2transport.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c > index 1a5fc3314dbf..4640fc4a8b13 100644 > --- a/fs/cifs/smb2transport.c > +++ b/fs/cifs/smb2transport.c > @@ -225,9 +225,9 @@ smb2_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server, > struct smb_rqst drqst; > > ses = smb2_find_smb_ses(server, le64_to_cpu(shdr->SessionId)); > - if (!ses) { > + if (unlikely(!ses)) { > cifs_server_dbg(VFS, "%s: Could not find session\n", __func__); > - return 0; > + return -ENOENT; > } > > memset(smb2_signature, 0x0, SMB2_HMACSHA256_SIZE); > @@ -557,8 +557,10 @@ smb3_calc_signature(struct smb_rqst *rqst, struct TCP_Server_Info *server, > u8 key[SMB3_SIGN_KEY_SIZE]; > > rc = smb2_get_sign_key(le64_to_cpu(shdr->SessionId), server, key); > - if (rc) > - return 0; > + if (unlikely(rc)) { > + cifs_server_dbg(VFS, "%s: Could not get signing key\n", __func__); > + return rc; > + } > > if (allocate_crypto) { > rc = cifs_alloc_hash("cmac(aes)", &hash, &sdesc); > -- > 2.35.3 >