David Woodhouse f85ba78068 tun: add IFF_TUN_EXCL flag to avoid opening a persistent device.
When creating a certain types of VPN, NetworkManager will first attempt
to find an available tun device by iterating through 'vpn%d' until it
finds one that isn't already busy. Then it'll set that to be persistent
and owned by the otherwise unprivileged user that the VPN dæmon itself
runs as.

There's a race condition here -- during the period where the vpn%d
device is created and we're waiting for the VPN dæmon to actually
connect and use it, if we try to create _another_ device we could end up
re-using the same one -- because trying to open it again doesn't get
-EBUSY as it would while it's _actually_ busy.

So solve this, we add an IFF_TUN_EXCL flag which causes tun_set_iff() to
fail if it would be opening an existing persistent tundevice -- so that
we can make sure we're getting an entirely _new_ device.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-04-27 03:23:54 -07:00
..
2009-04-11 02:53:56 -07:00
2009-03-23 01:18:58 -07:00
2008-12-17 15:37:55 -08:00
2009-04-13 15:16:33 -07:00
2009-04-21 18:12:11 -07:00
2009-04-17 15:45:15 -07:00
2009-01-21 14:02:21 -08:00
2008-12-08 01:14:16 -08:00
2009-03-27 00:46:38 -07:00
2009-01-21 14:02:23 -08:00
2009-01-21 14:02:24 -08:00
2009-01-21 14:02:24 -08:00
2009-01-21 14:02:25 -08:00
2008-11-25 18:12:49 -08:00
2009-04-24 04:45:33 -07:00
2009-04-14 21:57:00 -07:00
2008-11-25 18:25:32 -08:00
2009-04-11 02:53:46 -07:00
2009-01-07 18:10:24 -08:00
2009-04-14 21:57:02 -07:00
2009-04-14 21:57:03 -07:00
2009-04-16 02:20:06 -07:00
2009-04-04 16:51:14 -07:00
2009-04-08 15:50:07 -07:00
2009-04-04 16:51:14 -07:00
2009-03-02 22:32:48 -08:00
2009-02-15 23:32:01 -08:00
2009-02-15 23:32:01 -08:00
2009-02-15 23:32:01 -08:00
2009-03-02 22:32:43 -08:00
2008-09-22 19:27:10 -07:00
2009-04-16 02:20:07 -07:00
2009-01-07 17:34:36 -08:00
2009-01-07 17:34:36 -08:00
2009-04-14 21:57:04 -07:00
2008-02-01 20:54:03 +11:00
2009-04-16 02:20:08 -07:00
2008-11-20 20:28:00 -08:00
2009-01-07 17:30:09 -08:00
2009-01-21 14:33:50 -08:00
2009-04-08 15:56:33 -07:00
2008-11-25 18:23:59 -08:00
2009-04-16 02:34:48 -07:00
2009-02-04 16:43:44 -08:00
2009-02-26 21:02:19 -08:00
2008-11-25 18:24:57 -08:00
2009-04-16 02:20:08 -07:00
2009-04-16 02:20:10 -07:00
2009-01-06 10:47:44 -08:00
2009-04-13 15:16:31 -07:00
2008-08-14 04:26:38 -04:00
2009-04-27 02:53:52 -07:00
2009-04-16 02:20:15 -07:00
2009-03-27 00:46:48 -07:00
2009-04-16 02:20:15 -07:00
2008-11-25 18:24:38 -08:00
2009-04-20 02:25:26 -07:00
2009-04-13 15:16:29 -07:00
2009-04-16 02:20:16 -07:00
2009-04-16 02:20:16 -07:00
2009-04-13 15:16:26 -07:00
2009-04-16 02:20:17 -07:00
2007-10-19 11:53:42 -07:00
2009-04-16 02:20:18 -07:00
2009-04-16 02:20:21 -07:00
2009-04-04 16:38:42 -07:00
2009-04-16 02:20:22 -07:00
2009-03-27 00:46:53 -07:00
2008-03-26 00:18:00 -04:00
2009-03-27 00:46:53 -07:00
2009-03-28 23:37:27 -07:00
2009-04-08 15:52:16 -07:00
2009-01-07 17:26:48 -08:00
2009-03-13 16:09:12 -07:00
2008-01-28 15:11:27 -08:00
2009-03-13 16:09:12 -07:00
2009-03-13 16:09:12 -07:00
2008-11-10 15:11:56 -05:00
2009-04-08 15:50:43 -07:00
2009-04-13 16:21:03 -07:00
2009-04-16 02:20:24 -07:00
2009-01-07 17:56:54 -08:00
2009-04-16 02:20:25 -07:00
2009-04-13 15:16:25 -07:00
2007-10-16 21:10:29 -04:00
2008-08-07 01:55:50 -04:00
2008-01-28 15:11:27 -08:00
2009-01-07 18:09:36 -08:00
2009-04-16 02:20:25 -07:00
2009-03-27 00:46:48 -07:00
2007-07-16 15:02:47 +02:00
2008-04-16 20:06:50 -04:00
2008-11-25 18:25:49 -08:00
2008-08-29 02:13:33 -07:00
2008-01-28 15:07:10 -08:00
2008-08-29 02:14:29 -07:00
2008-08-29 02:14:43 -07:00
2009-03-20 00:51:22 -07:00
2009-04-13 15:16:23 -07:00
2009-04-21 01:41:03 -07:00
2008-05-30 22:18:02 -04:00
2009-03-03 23:36:04 -08:00
2009-01-11 00:06:36 -08:00
2009-04-13 15:16:21 -07:00
2009-01-21 14:02:31 -08:00