[Devel] [PATCH RHEL7 COMMIT] ve/net: fix userspace if_tun.h compilation
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Nov 12 01:25:07 PST 2015
The commit is pushed to "branch-rh7-3.10.0-229.7.2.vz7.9.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-229.7.2.vz7.9.9
------>
commit 20d9d273d62b292e544575af5277c75d449cd76c
Author: Vladimir Sementsov-Ogievskiy <vsementsov at virtuozzo.com>
Date: Thu Nov 12 13:25:07 2015 +0400
ve/net: fix userspace if_tun.h compilation
The patch fixes b59e089eb2d : "ve/net: introduce TAP accounting"
Currently if_tun.h uses IFNAMSIZ and it can't be compiled in userspace.
This patch fixes it and also use more common approach of sending data
to tun ioctl, without additional structure.
https://jira.sw.ru/browse/PSBM-40629
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov at virtuozzo.com>
Acked-by: Andrew Vagin <avagin at virtuozzo.com>
---
drivers/net/tun.c | 16 ++++++----------
include/uapi/linux/if.h | 2 ++
include/uapi/linux/if_tun.h | 8 +-------
3 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 779d73c..dd14140 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1921,17 +1921,12 @@ unlock:
#ifdef CONFIG_VE_TUNTAP_ACCOUNTING
/* setacctid_ioctl should be called under rtnl_lock */
-static long setacctid_ioctl(struct file *file, void __user *argp)
+static int tun_set_acctid(struct net *net, struct ifreq *ifr)
{
- struct tun_file *tfile = file->private_data;
- struct tun_acctid info;
struct net_device *dev;
struct tun_struct *tun;
- if (copy_from_user(&info, argp, sizeof(info)))
- return -EFAULT;
-
- dev = __dev_get_by_name(tfile->net, info.ifname);
+ dev = __dev_get_by_name(net, ifr->ifr_name);
if (dev == NULL)
return -ENOENT;
@@ -1943,7 +1938,7 @@ static long setacctid_ioctl(struct file *file, void __user *argp)
if (tun->vestat) {
venet_acct_put_stat(tun->vestat);
}
- tun->vestat = venet_acct_find_create_stat(info.acctid);
+ tun->vestat = venet_acct_find_create_stat(ifr->ifr_acctid);
if (tun->vestat == NULL)
return -ENOMEM;
@@ -1965,7 +1960,8 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
unsigned int ifindex;
int ret;
- if (cmd == TUNSETIFF || cmd == TUNSETQUEUE || _IOC_TYPE(cmd) == 0x89) {
+ if (cmd == TUNSETIFF || cmd == TUNSETQUEUE || cmd == TUNSETACCTID ||
+ _IOC_TYPE(cmd) == 0x89) {
if (copy_from_user(&ifr, argp, ifreq_len))
return -EFAULT;
} else {
@@ -1986,7 +1982,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
#ifdef CONFIG_VE_TUNTAP_ACCOUNTING
if (cmd == TUNSETACCTID) {
- ret = setacctid_ioctl(file, argp);
+ ret = tun_set_acctid(tfile->net, &ifr);
goto unlock;
}
#endif /* CONFIG_VE_TUNTAP_ACCOUNTING */
diff --git a/include/uapi/linux/if.h b/include/uapi/linux/if.h
index 1ec407b..49c472e 100644
--- a/include/uapi/linux/if.h
+++ b/include/uapi/linux/if.h
@@ -194,6 +194,7 @@ struct ifreq {
char ifru_newname[IFNAMSIZ];
void __user * ifru_data;
struct if_settings ifru_settings;
+ unsigned int ifru_acctid;
} ifr_ifru;
};
@@ -214,6 +215,7 @@ struct ifreq {
#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length */
#define ifr_newname ifr_ifru.ifru_newname /* New name */
#define ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/
+#define ifr_acctid ifr_ifru.ifru_acctid /* New ve accounting identifier */
/*
* Structure used in SIOCGIFCONF request.
diff --git a/include/uapi/linux/if_tun.h b/include/uapi/linux/if_tun.h
index 81e791e..5952d4b 100644
--- a/include/uapi/linux/if_tun.h
+++ b/include/uapi/linux/if_tun.h
@@ -60,7 +60,7 @@
#define TUNGETFILTER _IOR('T', 219, struct sock_fprog)
/* CONFIG_VE_TUNTAP_ACCOUNTING should be set */
-#define TUNSETACCTID _IOW('T', 300, struct tun_acctid)
+#define TUNSETACCTID _IOW('T', 300, struct ifreq)
/* TUNSETIFF ifr flags */
#define IFF_TUN 0x0001
@@ -106,10 +106,4 @@ struct tun_filter {
__u8 addr[0][ETH_ALEN];
};
-/* used as TUNSETACCTID ioctl parameter */
-struct tun_acctid {
- char ifname[IFNAMSIZ];
- __u32 acctid;
-};
-
#endif /* _UAPI__IF_TUN_H */
More information about the Devel
mailing list