Andrey, please review.

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 11/11/2015 01:00 PM, Vladimir Sementsov-Ogievskiy wrote:
Patch b59e089eb2d : "ve/net: introduce TAP accounting" uses IFNAMSIZ
in if_tun.h 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.

     #PSBM-40629:fixed

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@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..b0c8933 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 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 */

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to