From: Tobias Brunner Date: Sat, 15 Jun 2013 15:46:25 +0000 (+0200) Subject: tun-device: Avoid opening /dev/tunX multiple times (e.g. on FreeBSD) X-Git-Tag: 5.1.0dr1~80^2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8a56512a67076d5e5eb08166532e7081feec437;p=thirdparty%2Fstrongswan.git tun-device: Avoid opening /dev/tunX multiple times (e.g. on FreeBSD) --- diff --git a/src/libstrongswan/networking/tun_device.c b/src/libstrongswan/networking/tun_device.c index 2191198e29..00de2eddf5 100644 --- a/src/libstrongswan/networking/tun_device.c +++ b/src/libstrongswan/networking/tun_device.c @@ -390,14 +390,18 @@ static bool init_tun(private_tun_device_t *this, const char *name_tmpl) /* this works on FreeBSD and might also work on Linux with older TUN * driver versions (no IFF_TUN) */ char devname[IFNAMSIZ]; - int i; + /* the same process is allowed to open a device again, but that's not what + * we want (unless we previously closed a device, which we don't know at + * this point). therefore, this counter is static so we don't accidentally + * open a device twice */ + static int i = -1; if (name_tmpl) { DBG1(DBG_LIB, "arbitrary naming of TUN devices is not supported"); } - for (i = 0; i < 256; i++) + for (; ++i < 256; ) { snprintf(devname, IFNAMSIZ, "/dev/tun%d", i); this->tunfd = open(devname, O_RDWR);