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 /networking/libiproute | |
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.
Diffstat (limited to 'networking/libiproute')
-rw-r--r-- | networking/libiproute/ipaddress.c | 2 | ||||
-rw-r--r-- | networking/libiproute/iplink.c | 14 | ||||
-rw-r--r-- | networking/libiproute/iptunnel.c | 14 |
3 files changed, 15 insertions, 15 deletions
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); |