]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tipc: fix keylen check
authorAndrea Claudi <aclaudi@redhat.com>
Fri, 13 May 2022 09:52:30 +0000 (11:52 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 17 May 2022 19:57:45 +0000 (12:57 -0700)
Key length check in str2key() is wrong for hex. Fix this using the
proper hex key length.

Fixes: 28ee49e5153b ("tipc: bail out if key is abnormally long")
Suggested-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
tipc/misc.c

index 909975d8b7fe7e5f976a17fc4b3cab1a18232ae6..6175bf07d07c651f29f712307f5e5ebbb7a8bc39 100644 (file)
@@ -113,16 +113,15 @@ int str2key(char *str, struct tipc_aead_key *key)
            }
        }
 
-       if (len > TIPC_AEAD_KEYLEN_MAX)
+       key->keylen = ishex ? (len + 1) / 2 : len;
+       if (key->keylen > TIPC_AEAD_KEYLEN_MAX)
                return -1;
 
        /* Obtain key: */
        if (!ishex) {
-               key->keylen = len;
                memcpy(key->key, str, len);
        } else {
                /* Convert hex string to key */
-               key->keylen = (len + 1) / 2;
                for (i = 0; i < key->keylen; i++) {
                        if (i == 0 && len % 2 != 0) {
                                if (sscanf(str, "%1hhx", &key->key[0]) != 1)