int *timeout_io)
{
struct tun *st=sst;
- *nfds_io=1;
+ BEFOREPOLL_WANT_FDS(1);
fds[0].fd=st->fd;
fds[0].events=POLLIN;
return 0;
break;
}
}
- if (st->route_type==TUN_CONFIG_IOCTL) {
+ if (fd >= 0) {
close(fd);
}
routes->kup=up;
st->interface_name=safe_malloc(10,"tun_apply");
sprintf(st->interface_name,"tun%d",ppa);
st->fd=tun_fd;
+ setcloexec(if_ifd);
+ setcloexec(ip_ifd);
#else
fatal("tun_phase_hook: TUN_FLAVOUR_STREAMS unexpected");
#endif /* HAVE_TUN_STREAMS */
to set the TUN device's address, and route to add routes to all
our networks. */
+ setcloexec(st->fd);
+
hostaddr=ipaddr_to_string(st->nl.local_address);
secnetaddr=ipaddr_to_string(st->nl.secnet_address);
snprintf(mtu,sizeof(mtu),"%d",st->nl.mtu);
}
/* Register for poll() */
- register_for_poll(st, tun_beforepoll, tun_afterpoll, 1, st->nl.name);
+ register_for_poll(st, tun_beforepoll, tun_afterpoll, st->nl.name);
}
static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context,