[libiwinfo] apply FD_CLOEXEC on internal ioctl and netlink sockets

This commit is contained in:
Jo-Philipp Wich 2010-10-03 18:32:29 +00:00
parent e3570b7b0d
commit 2c9b1c4a1b
11 changed files with 37 additions and 7 deletions

View file

@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=libiwinfo PKG_NAME:=libiwinfo
PKG_RELEASE:=3 PKG_RELEASE:=4
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

View file

@ -202,7 +202,10 @@ static int madwifi_ioctl(struct iwreq *wrq, const char *ifname, int cmd, void *d
{ {
/* prepare socket */ /* prepare socket */
if( ioctl_socket == -1 ) if( ioctl_socket == -1 )
{
ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0); ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC);
}
strncpy(wrq->ifr_name, ifname, IFNAMSIZ); strncpy(wrq->ifr_name, ifname, IFNAMSIZ);

View file

@ -19,6 +19,8 @@
#ifndef __IWINFO_MADWIFI_H_ #ifndef __IWINFO_MADWIFI_H_
#define __IWINFO_MADWIFI_H_ #define __IWINFO_MADWIFI_H_
#include <fcntl.h>
#include "iwinfo.h" #include "iwinfo.h"
#include "include/madwifi.h" #include "include/madwifi.h"

View file

@ -32,7 +32,7 @@ static struct nl80211_state *nls = NULL;
static int nl80211_init(void) static int nl80211_init(void)
{ {
int err; int err, fd;
if( !nls ) if( !nls )
{ {
@ -53,6 +53,13 @@ static int nl80211_init(void)
goto err; goto err;
} }
fd = nl_socket_get_fd(nls->nl_sock);
if( fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC) < 0 )
{
err = -EINVAL;
goto err;
}
if( genl_ctrl_alloc_cache(nls->nl_sock, &nls->nl_cache)) { if( genl_ctrl_alloc_cache(nls->nl_sock, &nls->nl_cache)) {
err = -ENOMEM; err = -ENOMEM;
goto err; goto err;
@ -332,6 +339,9 @@ static char * nl80211_wpasupp_info(const char *ifname, const char *cmd)
remote_length = sizeof(remote.sun_family) + sprintf(remote.sun_path, remote_length = sizeof(remote.sun_family) + sprintf(remote.sun_path,
"/var/run/wpa_supplicant-%s/%s", ifname, ifname); "/var/run/wpa_supplicant-%s/%s", ifname, ifname);
if( fcntl(sock, F_SETFD, fcntl(sock, F_GETFD) | FD_CLOEXEC) < 0 )
goto out;
if( connect(sock, (struct sockaddr *) &remote, remote_length) ) if( connect(sock, (struct sockaddr *) &remote, remote_length) )
goto out; goto out;

View file

@ -20,6 +20,7 @@
#define __IWINFO_NL80211_H_ #define __IWINFO_NL80211_H_
#include <errno.h> #include <errno.h>
#include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <sys/socket.h> #include <sys/socket.h>

View file

@ -89,7 +89,10 @@ static int wext_ioctl(const char *ifname, int cmd, struct iwreq *wrq)
{ {
/* prepare socket */ /* prepare socket */
if( ioctl_socket == -1 ) if( ioctl_socket == -1 )
{
ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0); ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC);
}
if( !strncmp(ifname, "mon.", 4) ) if( !strncmp(ifname, "mon.", 4) )
strncpy(wrq->ifr_name, &ifname[4], IFNAMSIZ); strncpy(wrq->ifr_name, &ifname[4], IFNAMSIZ);

View file

@ -19,6 +19,8 @@
#ifndef __IWINFO_WEXT_H_ #ifndef __IWINFO_WEXT_H_
#define __IWINFO_WEXT_H_ #define __IWINFO_WEXT_H_
#include <fcntl.h>
#include "iwinfo.h" #include "iwinfo.h"
#include "include/wext.h" #include "include/wext.h"

View file

@ -29,7 +29,10 @@ static int wext_ioctl(const char *ifname, int cmd, struct iwreq *wrq)
{ {
/* prepare socket */ /* prepare socket */
if( ioctl_socket == -1 ) if( ioctl_socket == -1 )
{
ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0); ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC);
}
strncpy(wrq->ifr_name, ifname, IFNAMSIZ); strncpy(wrq->ifr_name, ifname, IFNAMSIZ);
return ioctl(ioctl_socket, cmd, wrq); return ioctl(ioctl_socket, cmd, wrq);
@ -249,7 +252,7 @@ static inline void wext_fill_wpa(unsigned char *iebuf, int buflen, struct iwinfo
case 0xdd: /* WPA or else */ case 0xdd: /* WPA or else */
wpa_oui = wpa1_oui; wpa_oui = wpa1_oui;
/* Not all IEs that start with 0xdd are WPA. /* Not all IEs that start with 0xdd are WPA.
* * So check that the OUI is valid. */ * * So check that the OUI is valid. */
if((ielen < 8) || ((memcmp(&iebuf[offset], wpa_oui, 3) != 0) if((ielen < 8) || ((memcmp(&iebuf[offset], wpa_oui, 3) != 0)
&& (iebuf[offset+3] == 0x01))) && (iebuf[offset+3] == 0x01)))
@ -477,7 +480,7 @@ int wext_get_scanlist(const char *ifname, char *buf, int *len)
wrq.u.data.pointer = (caddr_t) &range; wrq.u.data.pointer = (caddr_t) &range;
wrq.u.data.length = sizeof(struct iw_range); wrq.u.data.length = sizeof(struct iw_range);
wrq.u.data.flags = 0; wrq.u.data.flags = 0;
if( wext_ioctl(ifname, SIOCGIWRANGE, &wrq) >= 0 ) if( wext_ioctl(ifname, SIOCGIWRANGE, &wrq) >= 0 )
{ {
@ -650,4 +653,3 @@ int wext_get_scanlist(const char *ifname, char *buf, int *len)
return -1; return -1;
} }

View file

@ -19,6 +19,8 @@
#ifndef __IWINFO_WEXT_SCAN_H_ #ifndef __IWINFO_WEXT_SCAN_H_
#define __IWINFO_WEXT_SCAN_H_ #define __IWINFO_WEXT_SCAN_H_
#include <fcntl.h>
#include "iwinfo.h" #include "iwinfo.h"
#include "include/wext.h" #include "include/wext.h"
@ -320,7 +322,7 @@ static const struct iw_ioctl_description standard_event_descr[] = {
.header_type = IW_HEADER_TYPE_ADDR, .header_type = IW_HEADER_TYPE_ADDR,
}, },
[IWEVEXPIRED - IWEVFIRST] = { [IWEVEXPIRED - IWEVFIRST] = {
.header_type = IW_HEADER_TYPE_ADDR, .header_type = IW_HEADER_TYPE_ADDR,
}, },
[IWEVGENIE - IWEVFIRST] = { [IWEVGENIE - IWEVFIRST] = {
.header_type = IW_HEADER_TYPE_POINT, .header_type = IW_HEADER_TYPE_POINT,
@ -328,7 +330,7 @@ static const struct iw_ioctl_description standard_event_descr[] = {
.max_tokens = IW_GENERIC_IE_MAX, .max_tokens = IW_GENERIC_IE_MAX,
}, },
[IWEVMICHAELMICFAILURE - IWEVFIRST] = { [IWEVMICHAELMICFAILURE - IWEVFIRST] = {
.header_type = IW_HEADER_TYPE_POINT, .header_type = IW_HEADER_TYPE_POINT,
.token_size = 1, .token_size = 1,
.max_tokens = sizeof(struct iw_michaelmicfailure), .max_tokens = sizeof(struct iw_michaelmicfailure),
}, },

View file

@ -30,7 +30,10 @@ static int wl_ioctl(const char *name, int cmd, void *buf, int len)
/* prepare socket */ /* prepare socket */
if( ioctl_socket == -1 ) if( ioctl_socket == -1 )
{
ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0); ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC);
}
/* do it */ /* do it */
ioc.cmd = cmd; ioc.cmd = cmd;

View file

@ -19,6 +19,8 @@
#ifndef __IWINFO_WL_H_ #ifndef __IWINFO_WL_H_
#define __IWINFO_WL_H_ #define __IWINFO_WL_H_
#include <fcntl.h>
#include "iwinfo.h" #include "iwinfo.h"
#include "include/broadcom.h" #include "include/broadcom.h"