diff options
author | Bernd Eckenfels <net-tools@lina.inka.de> | 2006-10-11 01:13:57 +0000 |
---|---|---|
committer | Bernd Eckenfels <net-tools@lina.inka.de> | 2006-10-11 01:13:57 +0000 |
commit | 4347ec3e3ee46e42708b7d437ad148f1bb771716 (patch) | |
tree | 0d4ae74035efc8ac7c97eb6b5c99332f6ad7243f /ipmaddr.c | |
parent | formatting fixes from Justin Pryzby in Debian Bug #391495 (diff) | |
download | net-tools-4347ec3e3ee46e42708b7d437ad148f1bb771716.tar.gz net-tools-4347ec3e3ee46e42708b7d437ad148f1bb771716.tar.bz2 net-tools-4347ec3e3ee46e42708b7d437ad148f1bb771716.zip |
Fixed Debian Bug #392263 reported by Jochen Voss
(buffer overflow in dev argument processing)
Diffstat (limited to 'ipmaddr.c')
-rw-r--r-- | ipmaddr.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -291,13 +291,15 @@ static void print_mlist(FILE *fp, struct ma_info *list) static int multiaddr_list(int argc, char **argv) { struct ma_info *list = NULL; + size_t l; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); - if (filter_dev[0]) + l = strlen(*argv); + if (l <= 0 || l >= sizeof(filter_dev)) usage(); - strcpy(filter_dev, *argv); + strncpy(filter_dev, *argv, sizeof (filter_dev)); } else if (strcmp(*argv, "all") == 0) { filter_family = AF_UNSPEC; } else if (strcmp(*argv, "ipv4") == 0) { @@ -307,9 +309,10 @@ static int multiaddr_list(int argc, char **argv) } else if (strcmp(*argv, "link") == 0) { filter_family = AF_PACKET; } else { - if (filter_dev[0]) + l = strlen(*argv); + if (l <= 0 || l >= sizeof(filter_dev)) usage(); - strcpy(filter_dev, *argv); + strncpy(filter_dev, *argv, sizeof (filter_dev)); } argv++; argc--; } |