Browse Source

fix missing SOCK_CLOEXEC in various functions that use sockets internally

rs-1.0
Rich Felker 13 years ago
parent
commit
0716b10ac8
  1. 2
      src/network/getifaddrs.c
  2. 2
      src/network/if_indextoname.c
  3. 2
      src/network/if_nameindex.c
  4. 2
      src/network/if_nametoindex.c

2
src/network/getifaddrs.c

@ -127,7 +127,7 @@ int getifaddrs(struct ifaddrs **ifap)
} }
if_freenameindex(ii); if_freenameindex(ii);
int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); int sock = socket(PF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP);
if(sock == -1) goto err2; if(sock == -1) goto err2;
struct ifreq reqs[32]; /* arbitrary chosen boundary */ struct ifreq reqs[32]; /* arbitrary chosen boundary */
struct ifconf conf = {.ifc_len = sizeof reqs, .ifc_req = reqs}; struct ifconf conf = {.ifc_len = sizeof reqs, .ifc_req = reqs};

2
src/network/if_indextoname.c

@ -10,7 +10,7 @@ char *if_indextoname(unsigned index, char *name)
struct ifreq ifr; struct ifreq ifr;
int fd, r; int fd, r;
if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) return 0; if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) return 0;
ifr.ifr_ifindex = index; ifr.ifr_ifindex = index;
r = ioctl(fd, SIOCGIFNAME, &ifr); r = ioctl(fd, SIOCGIFNAME, &ifr);
__syscall(SYS_close, fd); __syscall(SYS_close, fd);

2
src/network/if_nameindex.c

@ -47,7 +47,7 @@ struct if_nameindex *if_nameindex()
{ {
size_t n; size_t n;
void *p = 0; void *p = 0;
int s = socket(AF_UNIX, SOCK_DGRAM, 0); int s = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
if (s>=0) { if (s>=0) {
for (n=0; (p=do_nameindex(s, n)) == (void *)-1; n++); for (n=0; (p=do_nameindex(s, n)) == (void *)-1; n++);
__syscall(SYS_close, s); __syscall(SYS_close, s);

2
src/network/if_nametoindex.c

@ -10,7 +10,7 @@ unsigned if_nametoindex(const char *name)
struct ifreq ifr; struct ifreq ifr;
int fd, r; int fd, r;
if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) return -1; if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) return -1;
strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name); strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
r = ioctl(fd, SIOCGIFINDEX, &ifr); r = ioctl(fd, SIOCGIFINDEX, &ifr);
__syscall(SYS_close, fd); __syscall(SYS_close, fd);

Loading…
Cancel
Save