]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
tipc: bail out if algname is abnormally long
authorAndrea Claudi <aclaudi@redhat.com>
Sat, 1 May 2021 16:32:29 +0000 (18:32 +0200)
committerDavid Ahern <dsahern@kernel.org>
Sun, 9 May 2021 22:08:47 +0000 (22:08 +0000)
tipc segfaults when called with an abnormally long algname:

$ tipc node set key 0x1234 algname supercalifragilistichespiralidososupercalifragilistichespiralidoso
*** buffer overflow detected ***: terminated

Fix this returning an error if provided algname is longer than
TIPC_AEAD_ALG_NAME.

Fixes: 24bee3bf9752 ("tipc: add new commands to set TIPC AEAD key")
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
tipc/node.c

index ae75bfff7d2f017bb9e8cdcf7afdd7d4e50961a8..bf592a07463565d8391b183122e56b1c1c8335f1 100644 (file)
@@ -236,10 +236,15 @@ get_ops:
 
        /* Get algorithm name, default: "gcm(aes)" */
        opt_algname = get_opt(opts, "algname");
-       if (!opt_algname)
+       if (!opt_algname) {
                strcpy(input.key.alg_name, "gcm(aes)");
-       else
+       } else {
+               if (strlen(opt_algname->val) > TIPC_AEAD_ALG_NAME) {
+                       fprintf(stderr, "error, invalid algname\n");
+                       return -EINVAL;
+               }
                strcpy(input.key.alg_name, opt_algname->val);
+       }
 
        /* Get node identity */
        opt_nodeid = get_opt(opts, "nodeid");