summaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorDenis Vlasenko2008-12-10 11:12:16 +0000
committerDenis Vlasenko2008-12-10 11:12:16 +0000
commite53738558f2f1aa8cd536545479ab98b0df808c5 (patch)
tree187265ed8377d2eee805dc7cc6b9150774804805 /networking
parent0d94820adf87b752c338c194a7291dcf1b96fc76 (diff)
downloadbusybox-e53738558f2f1aa8cd536545479ab98b0df808c5.zip
busybox-e53738558f2f1aa8cd536545479ab98b0df808c5.tar.gz
*: fix SO_BINDTODEVICE. Kernel wants at least IFNAMSIZ bytes there.
Diffstat (limited to 'networking')
-rw-r--r--networking/arping.c3
-rw-r--r--networking/ping.c4
-rw-r--r--networking/udhcp/socket.c4
3 files changed, 5 insertions, 6 deletions
diff --git a/networking/arping.c b/networking/arping.c
index e7b842f..915af32 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -331,8 +331,7 @@ int arping_main(int argc UNUSED_PARAM, char **argv)
struct sockaddr_in saddr;
int probe_fd = xsocket(AF_INET, SOCK_DGRAM, 0);
- if (setsockopt(probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device) + 1) == -1)
- bb_perror_msg("cannot bind to device %s", device);
+ setsockopt_bindtodevice(probe_fd, device);
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
if (src.s_addr) {
diff --git a/networking/ping.c b/networking/ping.c
index 01a9f9a..f2a612f 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -572,7 +572,7 @@ static void ping4(len_and_sockaddr *lsa)
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
}
if (str_I)
- setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, str_I, strlen(str_I) + 1);
+ setsockopt_bindtodevice(pingsock, str_I);
/* enable broadcast pings */
setsockopt_broadcast(pingsock);
@@ -622,7 +622,7 @@ static void ping6(len_and_sockaddr *lsa)
if (source_lsa)
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
if (str_I)
- setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, str_I, strlen(str_I) + 1);
+ setsockopt_bindtodevice(pingsock, str_I);
#ifdef ICMP6_FILTER
{
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index 857f0a4..fdb558d 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -98,8 +98,8 @@ int FAST_FUNC udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf)
bb_perror_msg_and_die("SO_BROADCAST");
/* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */
- if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &inf, strlen(inf) + 1) == -1)
- bb_perror_msg_and_die("SO_BINDTODEVICE");
+ if (setsockopt_bindtodevice(fd, inf))
+ xfunc_die(); /* warning is already printed */
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;