Message ID | 20220916235705.14044-1-ematsumiya@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | cifs: return correct error in ->calc_signature() | expand |
reviewed by me On Sat, 17 Sept 2022 at 09:57, Enzo Matsumiya <ematsumiya@suse.de> 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@suse.de> > --- > 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 >
merged into cifs-2.6.git for-next On Fri, Sep 16, 2022 at 8:04 PM ronnie sahlberg <ronniesahlberg@gmail.com> wrote: > > reviewed by me > > On Sat, 17 Sept 2022 at 09:57, Enzo Matsumiya <ematsumiya@suse.de> 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@suse.de> > > --- > > 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 > >
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);
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@suse.de> --- fs/cifs/smb2transport.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)