]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ipntable: Avoid memory allocation for filter.name
authorPhil Sutter <phil@nwl.cc>
Thu, 24 Aug 2017 09:51:45 +0000 (11:51 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 24 Aug 2017 21:53:14 +0000 (14:53 -0700)
The original issue was that filter.name might end up unterminated if
user provided string was too long. But in fact it is not necessary to
copy the commandline parameter at all: just make filter.name point to it
instead.

Signed-off-by: Phil Sutter <phil@nwl.cc>
ip/ipntable.c

index 1837909fa42e76947b98211ee38e3ab5eed4d3c3..88236ce0ec1e16083458caf67f465ecafe374ff4 100644 (file)
@@ -37,7 +37,7 @@ static struct
        int family;
        int index;
 #define NONE_DEV       (-1)
-       char name[1024];
+       const char *name;
 } filter;
 
 static void usage(void) __attribute__((noreturn));
@@ -367,7 +367,7 @@ static int print_ntable(const struct sockaddr_nl *who, struct nlmsghdr *n, void
        if (tb[NDTA_NAME]) {
                const char *name = rta_getattr_str(tb[NDTA_NAME]);
 
-               if (strlen(filter.name) > 0 && strcmp(filter.name, name))
+               if (filter.name && strcmp(filter.name, name))
                        return 0;
        }
        if (tb[NDTA_PARMS]) {
@@ -631,7 +631,7 @@ static int ipntable_show(int argc, char **argv)
                } else if (strcmp(*argv, "name") == 0) {
                        NEXT_ARG();
 
-                       strncpy(filter.name, *argv, sizeof(filter.name));
+                       filter.name = *argv;
                } else
                        invarg("unknown", *argv);