cifs: remove coverity warning in calc_lanman_hash
authorRonnie Sahlberg <lsahlber@redhat.com>
Wed, 12 Dec 2018 01:50:00 +0000 (11:50 +1000)
committerSteve French <stfrench@microsoft.com>
Mon, 24 Dec 2018 04:41:26 +0000 (22:41 -0600)
password_with_pad is a fixed size buffer of 16 bytes, it contains a
password string, to be padded with \0 if shorter than 16 bytes
but is just truncated if longer.
It is not, and we do not depend on it to be, nul terminated.

As such, do not use strncpy() to populate this buffer since
the str* prefix suggests that this is a string, which it is not,
and it also confuses coverity causing a false warning.

Detected by CoverityScan CID#113743 ("Buffer not null terminated")

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsencrypt.c

index ecdff344e8fea175e08e4dc886b5c2f59edddcdb..d2a05e46d6f52cee5026ea42227291a7cb124597 100644 (file)
@@ -304,12 +304,17 @@ int setup_ntlm_response(struct cifs_ses *ses, const struct nls_table *nls_cp)
 int calc_lanman_hash(const char *password, const char *cryptkey, bool encrypt,
                        char *lnm_session_key)
 {
-       int i;
+       int i, len;
        int rc;
        char password_with_pad[CIFS_ENCPWD_SIZE] = {0};
 
-       if (password)
-               strncpy(password_with_pad, password, CIFS_ENCPWD_SIZE);
+       if (password) {
+               for (len = 0; len < CIFS_ENCPWD_SIZE; len++)
+                       if (!password[len])
+                               break;
+
+               memcpy(password_with_pad, password, len);
+       }
 
        if (!encrypt && global_secflags & CIFSSEC_MAY_PLNTXT) {
                memcpy(lnm_session_key, password_with_pad,