X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fsolaris%2Fdevice.c;h=365561fdacb2f063074aed9e358b23d96968e4be;hb=3fba80174dbe29bcfe0d121a2a1d2e61be5ee57b;hp=579cece0d601100e6d79fcfc080a1e2bfed5c23e;hpb=178e52f76ef4ba40748c13ea7e518837394d6dbc;p=tinc diff --git a/src/solaris/device.c b/src/solaris/device.c index 579cece0..365561fd 100644 --- a/src/solaris/device.c +++ b/src/solaris/device.c @@ -1,7 +1,7 @@ /* device.c -- Interaction with Solaris tun device Copyright (C) 2001-2005 Ivo Timmermans, - 2001-2011 Guus Sliepen + 2001-2012 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -55,6 +55,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(device_fd, F_SETFD, FD_CLOEXEC); +#endif + ppa = 0; ptr = device; @@ -67,6 +71,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(ip_fd, F_SETFD, FD_CLOEXEC); +#endif + /* Assign a new PPA and get its unit number. */ if((ppa = ioctl(device_fd, TUNNEWPPA, ppa)) < 0) { logger(LOG_ERR, "Can't assign new interface: %s", strerror(errno)); @@ -79,6 +87,10 @@ static bool setup_device(void) { return false; } +#ifdef FD_CLOEXEC + fcntl(if_fd, F_SETFD, FD_CLOEXEC); +#endif + if(ioctl(if_fd, I_PUSH, "ip") < 0) { logger(LOG_ERR, "Can't push IP module: %s", strerror(errno)); return false; @@ -115,9 +127,9 @@ static void close_device(void) { } static bool read_packet(vpn_packet_t *packet) { - int lenin; + int inlen; - if((lenin = read(device_fd, packet->data + 14, MTU - 14)) <= 0) { + if((inlen = read(device_fd, packet->data + 14, MTU - 14)) <= 0) { logger(LOG_ERR, "Error while reading from %s %s: %s", device_info, device, strerror(errno)); return false; @@ -139,7 +151,7 @@ static bool read_packet(vpn_packet_t *packet) { return false; } - packet->len = lenin + 14; + packet->len = inlen + 14; device_total_in += packet->len;