diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-27 23:44:57 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-27 23:44:57 +0000 |
commit | 229b3d207216b23a107e4e1ee5584412f6b9318d (patch) | |
tree | d21a19b020f0ff35f7d0fa24f9812d68057ff06a | |
parent | e2d3ded3549edd58fe3b39f2254c65f0808bcac2 (diff) | |
download | busybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.tar.gz busybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.tar.bz2 busybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.zip |
do not overflow ifr_name. maybe it was safe in some places,
but not everywhere. err to the safe side.
-rw-r--r-- | networking/ether-wake.c | 2 | ||||
-rw-r--r-- | networking/interface.c | 20 | ||||
-rw-r--r-- | networking/libiproute/ipaddress.c | 2 | ||||
-rw-r--r-- | networking/libiproute/iplink.c | 14 | ||||
-rw-r--r-- | networking/libiproute/iptunnel.c | 14 | ||||
-rw-r--r-- | networking/route.c | 2 | ||||
-rw-r--r-- | networking/udhcp/socket.c | 2 |
7 files changed, 28 insertions, 28 deletions
diff --git a/networking/ether-wake.c b/networking/ether-wake.c index f870f6a5f..e205ffc00 100644 --- a/networking/ether-wake.c +++ b/networking/ether-wake.c | |||
@@ -145,7 +145,7 @@ int ether_wake_main(int argc, char *argv[]) | |||
145 | { | 145 | { |
146 | struct ifreq if_hwaddr; | 146 | struct ifreq if_hwaddr; |
147 | 147 | ||
148 | strcpy(if_hwaddr.ifr_name, ifname); | 148 | strncpy(if_hwaddr.ifr_name, ifname, sizeof(if_hwaddr.ifr_name)); |
149 | if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) | 149 | if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) |
150 | bb_perror_msg_and_die("SIOCGIFHWADDR on %s failed", ifname); | 150 | bb_perror_msg_and_die("SIOCGIFHWADDR on %s failed", ifname); |
151 | 151 | ||
diff --git a/networking/interface.c b/networking/interface.c index 5f54fd9e5..cabfc063b 100644 --- a/networking/interface.c +++ b/networking/interface.c | |||
@@ -617,12 +617,12 @@ static int if_fetch(struct interface *ife) | |||
617 | int fd; | 617 | int fd; |
618 | char *ifname = ife->name; | 618 | char *ifname = ife->name; |
619 | 619 | ||
620 | strcpy(ifr.ifr_name, ifname); | 620 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
621 | if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) | 621 | if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) |
622 | return -1; | 622 | return -1; |
623 | ife->flags = ifr.ifr_flags; | 623 | ife->flags = ifr.ifr_flags; |
624 | 624 | ||
625 | strcpy(ifr.ifr_name, ifname); | 625 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
626 | if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) | 626 | if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) |
627 | memset(ife->hwaddr, 0, 32); | 627 | memset(ife->hwaddr, 0, 32); |
628 | else | 628 | else |
@@ -630,20 +630,20 @@ static int if_fetch(struct interface *ife) | |||
630 | 630 | ||
631 | ife->type = ifr.ifr_hwaddr.sa_family; | 631 | ife->type = ifr.ifr_hwaddr.sa_family; |
632 | 632 | ||
633 | strcpy(ifr.ifr_name, ifname); | 633 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
634 | if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0) | 634 | if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0) |
635 | ife->metric = 0; | 635 | ife->metric = 0; |
636 | else | 636 | else |
637 | ife->metric = ifr.ifr_metric; | 637 | ife->metric = ifr.ifr_metric; |
638 | 638 | ||
639 | strcpy(ifr.ifr_name, ifname); | 639 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
640 | if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0) | 640 | if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0) |
641 | ife->mtu = 0; | 641 | ife->mtu = 0; |
642 | else | 642 | else |
643 | ife->mtu = ifr.ifr_mtu; | 643 | ife->mtu = ifr.ifr_mtu; |
644 | 644 | ||
645 | #ifdef SIOCGIFMAP | 645 | #ifdef SIOCGIFMAP |
646 | strcpy(ifr.ifr_name, ifname); | 646 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
647 | if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0) | 647 | if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0) |
648 | ife->map = ifr.ifr_map; | 648 | ife->map = ifr.ifr_map; |
649 | else | 649 | else |
@@ -651,7 +651,7 @@ static int if_fetch(struct interface *ife) | |||
651 | memset(&ife->map, 0, sizeof(struct ifmap)); | 651 | memset(&ife->map, 0, sizeof(struct ifmap)); |
652 | 652 | ||
653 | #ifdef HAVE_TXQUEUELEN | 653 | #ifdef HAVE_TXQUEUELEN |
654 | strcpy(ifr.ifr_name, ifname); | 654 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
655 | if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0) | 655 | if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0) |
656 | ife->tx_queue_len = -1; /* unknown value */ | 656 | ife->tx_queue_len = -1; /* unknown value */ |
657 | else | 657 | else |
@@ -663,24 +663,24 @@ static int if_fetch(struct interface *ife) | |||
663 | /* IPv4 address? */ | 663 | /* IPv4 address? */ |
664 | fd = get_socket_for_af(AF_INET); | 664 | fd = get_socket_for_af(AF_INET); |
665 | if (fd >= 0) { | 665 | if (fd >= 0) { |
666 | strcpy(ifr.ifr_name, ifname); | 666 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
667 | ifr.ifr_addr.sa_family = AF_INET; | 667 | ifr.ifr_addr.sa_family = AF_INET; |
668 | if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { | 668 | if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { |
669 | ife->has_ip = 1; | 669 | ife->has_ip = 1; |
670 | ife->addr = ifr.ifr_addr; | 670 | ife->addr = ifr.ifr_addr; |
671 | strcpy(ifr.ifr_name, ifname); | 671 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
672 | if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0) | 672 | if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0) |
673 | memset(&ife->dstaddr, 0, sizeof(struct sockaddr)); | 673 | memset(&ife->dstaddr, 0, sizeof(struct sockaddr)); |
674 | else | 674 | else |
675 | ife->dstaddr = ifr.ifr_dstaddr; | 675 | ife->dstaddr = ifr.ifr_dstaddr; |
676 | 676 | ||
677 | strcpy(ifr.ifr_name, ifname); | 677 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
678 | if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0) | 678 | if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0) |
679 | memset(&ife->broadaddr, 0, sizeof(struct sockaddr)); | 679 | memset(&ife->broadaddr, 0, sizeof(struct sockaddr)); |
680 | else | 680 | else |
681 | ife->broadaddr = ifr.ifr_broadaddr; | 681 | ife->broadaddr = ifr.ifr_broadaddr; |
682 | 682 | ||
683 | strcpy(ifr.ifr_name, ifname); | 683 | strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
684 | if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) | 684 | if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) |
685 | memset(&ife->netmask, 0, sizeof(struct sockaddr)); | 685 | memset(&ife->netmask, 0, sizeof(struct sockaddr)); |
686 | else | 686 | else |
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c index 42cf629c6..2a267fef6 100644 --- a/networking/libiproute/ipaddress.c +++ b/networking/libiproute/ipaddress.c | |||
@@ -86,7 +86,7 @@ static void print_queuelen(char *name) | |||
86 | return; | 86 | return; |
87 | 87 | ||
88 | memset(&ifr, 0, sizeof(ifr)); | 88 | memset(&ifr, 0, sizeof(ifr)); |
89 | strcpy(ifr.ifr_name, name); | 89 | strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); |
90 | if (ioctl(s, SIOCGIFTXQLEN, &ifr) < 0) { | 90 | if (ioctl(s, SIOCGIFTXQLEN, &ifr) < 0) { |
91 | perror("SIOCGIFXQLEN"); | 91 | perror("SIOCGIFXQLEN"); |
92 | close(s); | 92 | close(s); |
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c index f79dab402..1ea11f60b 100644 --- a/networking/libiproute/iplink.c +++ b/networking/libiproute/iplink.c | |||
@@ -61,7 +61,7 @@ static int do_chflags(char *dev, __u32 flags, __u32 mask) | |||
61 | int fd; | 61 | int fd; |
62 | int err; | 62 | int err; |
63 | 63 | ||
64 | strcpy(ifr.ifr_name, dev); | 64 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
65 | fd = get_ctl_fd(); | 65 | fd = get_ctl_fd(); |
66 | if (fd < 0) | 66 | if (fd < 0) |
67 | return -1; | 67 | return -1; |
@@ -88,8 +88,8 @@ static int do_changename(char *dev, char *newdev) | |||
88 | int fd; | 88 | int fd; |
89 | int err; | 89 | int err; |
90 | 90 | ||
91 | strcpy(ifr.ifr_name, dev); | 91 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
92 | strcpy(ifr.ifr_newname, newdev); | 92 | strncpy(ifr.ifr_newname, newdev, sizeof(ifr.ifr_newname)); |
93 | fd = get_ctl_fd(); | 93 | fd = get_ctl_fd(); |
94 | if (fd < 0) | 94 | if (fd < 0) |
95 | return -1; | 95 | return -1; |
@@ -113,7 +113,7 @@ static int set_qlen(char *dev, int qlen) | |||
113 | return -1; | 113 | return -1; |
114 | 114 | ||
115 | memset(&ifr, 0, sizeof(ifr)); | 115 | memset(&ifr, 0, sizeof(ifr)); |
116 | strcpy(ifr.ifr_name, dev); | 116 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
117 | ifr.ifr_qlen = qlen; | 117 | ifr.ifr_qlen = qlen; |
118 | if (ioctl(s, SIOCSIFTXQLEN, &ifr) < 0) { | 118 | if (ioctl(s, SIOCSIFTXQLEN, &ifr) < 0) { |
119 | perror("SIOCSIFXQLEN"); | 119 | perror("SIOCSIFXQLEN"); |
@@ -135,7 +135,7 @@ static int set_mtu(char *dev, int mtu) | |||
135 | return -1; | 135 | return -1; |
136 | 136 | ||
137 | memset(&ifr, 0, sizeof(ifr)); | 137 | memset(&ifr, 0, sizeof(ifr)); |
138 | strcpy(ifr.ifr_name, dev); | 138 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
139 | ifr.ifr_mtu = mtu; | 139 | ifr.ifr_mtu = mtu; |
140 | if (ioctl(s, SIOCSIFMTU, &ifr) < 0) { | 140 | if (ioctl(s, SIOCSIFMTU, &ifr) < 0) { |
141 | perror("SIOCSIFMTU"); | 141 | perror("SIOCSIFMTU"); |
@@ -161,7 +161,7 @@ static int get_address(char *dev, int *htype) | |||
161 | } | 161 | } |
162 | 162 | ||
163 | memset(&ifr, 0, sizeof(ifr)); | 163 | memset(&ifr, 0, sizeof(ifr)); |
164 | strcpy(ifr.ifr_name, dev); | 164 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
165 | if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) { | 165 | if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) { |
166 | perror("SIOCGIFINDEX"); | 166 | perror("SIOCGIFINDEX"); |
167 | close(s); | 167 | close(s); |
@@ -194,7 +194,7 @@ static int parse_address(char *dev, int hatype, int halen, char *lla, struct ifr | |||
194 | int alen; | 194 | int alen; |
195 | 195 | ||
196 | memset(ifr, 0, sizeof(*ifr)); | 196 | memset(ifr, 0, sizeof(*ifr)); |
197 | strcpy(ifr->ifr_name, dev); | 197 | strncpy(ifr->ifr_name, dev, sizeof(ifr->ifr_name)); |
198 | ifr->ifr_hwaddr.sa_family = hatype; | 198 | ifr->ifr_hwaddr.sa_family = hatype; |
199 | alen = ll_addr_a2n((unsigned char *)(ifr->ifr_hwaddr.sa_data), 14, lla); | 199 | alen = ll_addr_a2n((unsigned char *)(ifr->ifr_hwaddr.sa_data), 14, lla); |
200 | if (alen < 0) | 200 | if (alen < 0) |
diff --git a/networking/libiproute/iptunnel.c b/networking/libiproute/iptunnel.c index 2b9d3055e..2080324ac 100644 --- a/networking/libiproute/iptunnel.c +++ b/networking/libiproute/iptunnel.c | |||
@@ -42,7 +42,7 @@ static int do_ioctl_get_ifindex(char *dev) | |||
42 | struct ifreq ifr; | 42 | struct ifreq ifr; |
43 | int fd; | 43 | int fd; |
44 | 44 | ||
45 | strcpy(ifr.ifr_name, dev); | 45 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
46 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 46 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
47 | if (ioctl(fd, SIOCGIFINDEX, &ifr)) { | 47 | if (ioctl(fd, SIOCGIFINDEX, &ifr)) { |
48 | bb_perror_msg("ioctl"); | 48 | bb_perror_msg("ioctl"); |
@@ -57,7 +57,7 @@ static int do_ioctl_get_iftype(char *dev) | |||
57 | struct ifreq ifr; | 57 | struct ifreq ifr; |
58 | int fd; | 58 | int fd; |
59 | 59 | ||
60 | strcpy(ifr.ifr_name, dev); | 60 | strncpy(ifr.ifr_name, dev, sizeof(ifr.ifr_name)); |
61 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 61 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
62 | if (ioctl(fd, SIOCGIFHWADDR, &ifr)) { | 62 | if (ioctl(fd, SIOCGIFHWADDR, &ifr)) { |
63 | bb_perror_msg("ioctl"); | 63 | bb_perror_msg("ioctl"); |
@@ -91,7 +91,7 @@ static int do_get_ioctl(char *basedev, struct ip_tunnel_parm *p) | |||
91 | int fd; | 91 | int fd; |
92 | int err; | 92 | int err; |
93 | 93 | ||
94 | strcpy(ifr.ifr_name, basedev); | 94 | strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); |
95 | ifr.ifr_ifru.ifru_data = (void*)p; | 95 | ifr.ifr_ifru.ifru_data = (void*)p; |
96 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 96 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
97 | err = ioctl(fd, SIOCGETTUNNEL, &ifr); | 97 | err = ioctl(fd, SIOCGETTUNNEL, &ifr); |
@@ -109,9 +109,9 @@ static int do_add_ioctl(int cmd, char *basedev, struct ip_tunnel_parm *p) | |||
109 | int err; | 109 | int err; |
110 | 110 | ||
111 | if (cmd == SIOCCHGTUNNEL && p->name[0]) { | 111 | if (cmd == SIOCCHGTUNNEL && p->name[0]) { |
112 | strcpy(ifr.ifr_name, p->name); | 112 | strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name)); |
113 | } else { | 113 | } else { |
114 | strcpy(ifr.ifr_name, basedev); | 114 | strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); |
115 | } | 115 | } |
116 | ifr.ifr_ifru.ifru_data = (void*)p; | 116 | ifr.ifr_ifru.ifru_data = (void*)p; |
117 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 117 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
@@ -130,9 +130,9 @@ static int do_del_ioctl(char *basedev, struct ip_tunnel_parm *p) | |||
130 | int err; | 130 | int err; |
131 | 131 | ||
132 | if (p->name[0]) { | 132 | if (p->name[0]) { |
133 | strcpy(ifr.ifr_name, p->name); | 133 | strncpy(ifr.ifr_name, p->name, sizeof(ifr.ifr_name)); |
134 | } else { | 134 | } else { |
135 | strcpy(ifr.ifr_name, basedev); | 135 | strncpy(ifr.ifr_name, basedev, sizeof(ifr.ifr_name)); |
136 | } | 136 | } |
137 | ifr.ifr_ifru.ifru_data = (void*)p; | 137 | ifr.ifr_ifru.ifru_data = (void*)p; |
138 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); | 138 | fd = xsocket(AF_INET, SOCK_DGRAM, 0); |
diff --git a/networking/route.c b/networking/route.c index f343d064c..a8926f44e 100644 --- a/networking/route.c +++ b/networking/route.c | |||
@@ -422,7 +422,7 @@ static void INET6_setroute(int action, char **args) | |||
422 | if (devname) { | 422 | if (devname) { |
423 | struct ifreq ifr; | 423 | struct ifreq ifr; |
424 | memset(&ifr, 0, sizeof(ifr)); | 424 | memset(&ifr, 0, sizeof(ifr)); |
425 | strcpy(ifr.ifr_name, devname); | 425 | strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name)); |
426 | 426 | ||
427 | if (ioctl(skfd, SIOGIFINDEX, &ifr) < 0) { | 427 | if (ioctl(skfd, SIOGIFINDEX, &ifr) < 0) { |
428 | bb_perror_msg_and_die("SIOGIFINDEX"); | 428 | bb_perror_msg_and_die("SIOGIFINDEX"); |
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c index b27dca300..92bf4cccf 100644 --- a/networking/udhcp/socket.c +++ b/networking/udhcp/socket.c | |||
@@ -51,7 +51,7 @@ int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) | |||
51 | } | 51 | } |
52 | 52 | ||
53 | ifr.ifr_addr.sa_family = AF_INET; | 53 | ifr.ifr_addr.sa_family = AF_INET; |
54 | strcpy(ifr.ifr_name, interface); | 54 | strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)); |
55 | if (addr) { | 55 | if (addr) { |
56 | if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { | 56 | if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { |
57 | bb_perror_msg("SIOCGIFADDR failed, is the interface up and configured?"); | 57 | bb_perror_msg("SIOCGIFADDR failed, is the interface up and configured?"); |