diff options
author | Pavel Emelyanov <xemul@parallels.com> | 2013-08-21 14:32:39 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-21 12:21:45 -0700 |
commit | 76975e9cb4a7c6fe39478a3dc4dd292a5c6c8c74 (patch) | |
tree | c17c80f50fc5fa83b350e28ca04630ad738d0213 | |
parent | 849c9b6f93cc4cb5eb59301b6380a7a81b43f414 (diff) | |
download | linux-stable-76975e9cb4a7c6fe39478a3dc4dd292a5c6c8c74.tar.gz linux-stable-76975e9cb4a7c6fe39478a3dc4dd292a5c6c8c74.tar.bz2 linux-stable-76975e9cb4a7c6fe39478a3dc4dd292a5c6c8c74.zip |
tun: Get skfilter layout
The only thing we may have from tun device is the fprog, whic contains
the number of filter elements and a pointer to (user-space) memory
where the elements are. The program itself may not be available if the
device is persistent and detached.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/tun.c | 10 | ||||
-rw-r--r-- | include/uapi/linux/if_tun.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 6acbdbccebcd..60a1e93e9d35 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2042,6 +2042,16 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, tun_detach_filter(tun, tun->numqueues); break; + case TUNGETFILTER: + ret = -EINVAL; + if ((tun->flags & TUN_TYPE_MASK) != TUN_TAP_DEV) + break; + ret = -EFAULT; + if (copy_to_user(argp, &tun->fprog, sizeof(tun->fprog))) + break; + ret = 0; + break; + default: ret = -EINVAL; break; diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h index cc127b2b4c3d..e9502dd1ee2c 100644 --- a/include/uapi/linux/if_tun.h +++ b/include/uapi/linux/if_tun.h @@ -57,6 +57,7 @@ #define TUNSETVNETHDRSZ _IOW('T', 216, int) #define TUNSETQUEUE _IOW('T', 217, int) #define TUNSETIFINDEX _IOW('T', 218, unsigned int) +#define TUNGETFILTER _IOR('T', 219, struct sock_fprog) /* TUNSETIFF ifr flags */ #define IFF_TUN 0x0001 |