Linux Audio

Check our new training course

Loading...
   1/*
   2 *  TUN - Universal TUN/TAP device driver.
   3 *  Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
   4 *
   5 *  This program is free software; you can redistribute it and/or modify
   6 *  it under the terms of the GNU General Public License as published by
   7 *  the Free Software Foundation; either version 2 of the License, or
   8 *  (at your option) any later version.
   9 *
  10 *  This program is distributed in the hope that it will be useful,
  11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 *  GNU General Public License for more details.
  14 *
  15 *  $Id: tun.c,v 1.15 2002/03/01 02:44:24 maxk Exp $
  16 */
  17
  18/*
  19 *  Changes:
  20 *
  21 *  Mike Kershaw <dragorn@kismetwireless.net> 2005/08/14
  22 *    Add TUNSETLINK ioctl to set the link encapsulation
  23 *
  24 *  Mark Smith <markzzzsmith@yahoo.com.au>
  25 *    Use random_ether_addr() for tap MAC address.
  26 *
  27 *  Harald Roelle <harald.roelle@ifi.lmu.de>  2004/04/20
  28 *    Fixes in packet dropping, queue length setting and queue wakeup.
  29 *    Increased default tx queue length.
  30 *    Added ethtool API.
  31 *    Minor cleanups
  32 *
  33 *  Daniel Podlejski <underley@underley.eu.org>
  34 *    Modifications for 2.3.99-pre5 kernel.
  35 */
  36
  37#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  38
  39#define DRV_NAME	"tun"
  40#define DRV_VERSION	"1.6"
  41#define DRV_DESCRIPTION	"Universal TUN/TAP device driver"
  42#define DRV_COPYRIGHT	"(C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>"
  43
  44#include <linux/module.h>
  45#include <linux/errno.h>
  46#include <linux/kernel.h>
  47#include <linux/major.h>
  48#include <linux/slab.h>
  49#include <linux/poll.h>
  50#include <linux/fcntl.h>
  51#include <linux/init.h>
  52#include <linux/skbuff.h>
  53#include <linux/netdevice.h>
  54#include <linux/etherdevice.h>
  55#include <linux/miscdevice.h>
  56#include <linux/ethtool.h>
  57#include <linux/rtnetlink.h>
  58#include <linux/compat.h>
  59#include <linux/if.h>
  60#include <linux/if_arp.h>
  61#include <linux/if_ether.h>
  62#include <linux/if_tun.h>
  63#include <linux/crc32.h>
  64#include <linux/nsproxy.h>
  65#include <linux/virtio_net.h>
  66#include <linux/rcupdate.h>
  67#include <net/net_namespace.h>
  68#include <net/netns/generic.h>
  69#include <net/rtnetlink.h>
  70#include <net/sock.h>
  71
  72#include <asm/uaccess.h>
  73
  74/* Uncomment to enable debugging */
  75/* #define TUN_DEBUG 1 */
  76
  77#ifdef TUN_DEBUG
  78static int debug;
  79
  80#define tun_debug(level, tun, fmt, args...)			\
  81do {								\
  82	if (tun->debug)						\
  83		netdev_printk(level, tun->dev, fmt, ##args);	\
  84} while (0)
  85#define DBG1(level, fmt, args...)				\
  86do {								\
  87	if (debug == 2)						\
  88		printk(level fmt, ##args);			\
  89} while (0)
  90#else
  91#define tun_debug(level, tun, fmt, args...)			\
  92do {								\
  93	if (0)							\
  94		netdev_printk(level, tun->dev, fmt, ##args);	\
  95} while (0)
  96#define DBG1(level, fmt, args...)				\
  97do {								\
  98	if (0)							\
  99		printk(level fmt, ##args);			\
 100} while (0)
 101#endif
 102
 103#define FLT_EXACT_COUNT 8
 104struct tap_filter {
 105	unsigned int    count;    /* Number of addrs. Zero means disabled */
 106	u32             mask[2];  /* Mask of the hashed addrs */
 107	unsigned char	addr[FLT_EXACT_COUNT][ETH_ALEN];
 108};
 109
 110struct tun_file {
 111	atomic_t count;
 112	struct tun_struct *tun;
 113	struct net *net;
 114};
 115
 116struct tun_sock;
 117
 118struct tun_struct {
 119	struct tun_file		*tfile;
 120	unsigned int 		flags;
 121	uid_t			owner;
 122	gid_t			group;
 123
 124	struct net_device	*dev;
 125	netdev_features_t	set_features;
 126#define TUN_USER_FEATURES (NETIF_F_HW_CSUM|NETIF_F_TSO_ECN|NETIF_F_TSO| \
 127			  NETIF_F_TSO6|NETIF_F_UFO)
 128	struct fasync_struct	*fasync;
 129
 130	struct tap_filter       txflt;
 131	struct socket		socket;
 132	struct socket_wq	wq;
 133
 134	int			vnet_hdr_sz;
 135
 136#ifdef TUN_DEBUG
 137	int debug;
 138#endif
 139};
 140
 141struct tun_sock {
 142	struct sock		sk;
 143	struct tun_struct	*tun;
 144};
 145
 146static inline struct tun_sock *tun_sk(struct sock *sk)
 147{
 148	return container_of(sk, struct tun_sock, sk);
 149}
 150
 151static int tun_attach(struct tun_struct *tun, struct file *file)
 152{
 153	struct tun_file *tfile = file->private_data;
 154	int err;
 155
 156	ASSERT_RTNL();
 157
 158	netif_tx_lock_bh(tun->dev);
 159
 160	err = -EINVAL;
 161	if (tfile->tun)
 162		goto out;
 163
 164	err = -EBUSY;
 165	if (tun->tfile)
 166		goto out;
 167
 168	err = 0;
 169	tfile->tun = tun;
 170	tun->tfile = tfile;
 171	tun->socket.file = file;
 172	netif_carrier_on(tun->dev);
 173	dev_hold(tun->dev);
 174	sock_hold(tun->socket.sk);
 175	atomic_inc(&tfile->count);
 176
 177out:
 178	netif_tx_unlock_bh(tun->dev);
 179	return err;
 180}
 181
 182static void __tun_detach(struct tun_struct *tun)
 183{
 184	/* Detach from net device */
 185	netif_tx_lock_bh(tun->dev);
 186	netif_carrier_off(tun->dev);
 187	tun->tfile = NULL;
 188	netif_tx_unlock_bh(tun->dev);
 189
 190	/* Drop read queue */
 191	skb_queue_purge(&tun->socket.sk->sk_receive_queue);
 192
 193	/* Drop the extra count on the net device */
 194	dev_put(tun->dev);
 195}
 196
 197static void tun_detach(struct tun_struct *tun)
 198{
 199	rtnl_lock();
 200	__tun_detach(tun);
 201	rtnl_unlock();
 202}
 203
 204static struct tun_struct *__tun_get(struct tun_file *tfile)
 205{
 206	struct tun_struct *tun = NULL;
 207
 208	if (atomic_inc_not_zero(&tfile->count))
 209		tun = tfile->tun;
 210
 211	return tun;
 212}
 213
 214static struct tun_struct *tun_get(struct file *file)
 215{
 216	return __tun_get(file->private_data);
 217}
 218
 219static void tun_put(struct tun_struct *tun)
 220{
 221	struct tun_file *tfile = tun->tfile;
 222
 223	if (atomic_dec_and_test(&tfile->count))
 224		tun_detach(tfile->tun);
 225}
 226
 227/* TAP filtering */
 228static void addr_hash_set(u32 *mask, const u8 *addr)
 229{
 230	int n = ether_crc(ETH_ALEN, addr) >> 26;
 231	mask[n >> 5] |= (1 << (n & 31));
 232}
 233
 234static unsigned int addr_hash_test(const u32 *mask, const u8 *addr)
 235{
 236	int n = ether_crc(ETH_ALEN, addr) >> 26;
 237	return mask[n >> 5] & (1 << (n & 31));
 238}
 239
 240static int update_filter(struct tap_filter *filter, void __user *arg)
 241{
 242	struct { u8 u[ETH_ALEN]; } *addr;
 243	struct tun_filter uf;
 244	int err, alen, n, nexact;
 245
 246	if (copy_from_user(&uf, arg, sizeof(uf)))
 247		return -EFAULT;
 248
 249	if (!uf.count) {
 250		/* Disabled */
 251		filter->count = 0;
 252		return 0;
 253	}
 254
 255	alen = ETH_ALEN * uf.count;
 256	addr = kmalloc(alen, GFP_KERNEL);
 257	if (!addr)
 258		return -ENOMEM;
 259
 260	if (copy_from_user(addr, arg + sizeof(uf), alen)) {
 261		err = -EFAULT;
 262		goto done;
 263	}
 264
 265	/* The filter is updated without holding any locks. Which is
 266	 * perfectly safe. We disable it first and in the worst
 267	 * case we'll accept a few undesired packets. */
 268	filter->count = 0;
 269	wmb();
 270
 271	/* Use first set of addresses as an exact filter */
 272	for (n = 0; n < uf.count && n < FLT_EXACT_COUNT; n++)
 273		memcpy(filter->addr[n], addr[n].u, ETH_ALEN);
 274
 275	nexact = n;
 276
 277	/* Remaining multicast addresses are hashed,
 278	 * unicast will leave the filter disabled. */
 279	memset(filter->mask, 0, sizeof(filter->mask));
 280	for (; n < uf.count; n++) {
 281		if (!is_multicast_ether_addr(addr[n].u)) {
 282			err = 0; /* no filter */
 283			goto done;
 284		}
 285		addr_hash_set(filter->mask, addr[n].u);
 286	}
 287
 288	/* For ALLMULTI just set the mask to all ones.
 289	 * This overrides the mask populated above. */
 290	if ((uf.flags & TUN_FLT_ALLMULTI))
 291		memset(filter->mask, ~0, sizeof(filter->mask));
 292
 293	/* Now enable the filter */
 294	wmb();
 295	filter->count = nexact;
 296
 297	/* Return the number of exact filters */
 298	err = nexact;
 299
 300done:
 301	kfree(addr);
 302	return err;
 303}
 304
 305/* Returns: 0 - drop, !=0 - accept */
 306static int run_filter(struct tap_filter *filter, const struct sk_buff *skb)
 307{
 308	/* Cannot use eth_hdr(skb) here because skb_mac_hdr() is incorrect
 309	 * at this point. */
 310	struct ethhdr *eh = (struct ethhdr *) skb->data;
 311	int i;
 312
 313	/* Exact match */
 314	for (i = 0; i < filter->count; i++)
 315		if (ether_addr_equal(eh->h_dest, filter->addr[i]))
 316			return 1;
 317
 318	/* Inexact match (multicast only) */
 319	if (is_multicast_ether_addr(eh->h_dest))
 320		return addr_hash_test(filter->mask, eh->h_dest);
 321
 322	return 0;
 323}
 324
 325/*
 326 * Checks whether the packet is accepted or not.
 327 * Returns: 0 - drop, !=0 - accept
 328 */
 329static int check_filter(struct tap_filter *filter, const struct sk_buff *skb)
 330{
 331	if (!filter->count)
 332		return 1;
 333
 334	return run_filter(filter, skb);
 335}
 336
 337/* Network device part of the driver */
 338
 339static const struct ethtool_ops tun_ethtool_ops;
 340
 341/* Net device detach from fd. */
 342static void tun_net_uninit(struct net_device *dev)
 343{
 344	struct tun_struct *tun = netdev_priv(dev);
 345	struct tun_file *tfile = tun->tfile;
 346
 347	/* Inform the methods they need to stop using the dev.
 348	 */
 349	if (tfile) {
 350		wake_up_all(&tun->wq.wait);
 351		if (atomic_dec_and_test(&tfile->count))
 352			__tun_detach(tun);
 353	}
 354}
 355
 356static void tun_free_netdev(struct net_device *dev)
 357{
 358	struct tun_struct *tun = netdev_priv(dev);
 359
 360	BUG_ON(!test_bit(SOCK_EXTERNALLY_ALLOCATED, &tun->socket.flags));
 361
 362	sk_release_kernel(tun->socket.sk);
 363}
 364
 365/* Net device open. */
 366static int tun_net_open(struct net_device *dev)
 367{
 368	netif_start_queue(dev);
 369	return 0;
 370}
 371
 372/* Net device close. */
 373static int tun_net_close(struct net_device *dev)
 374{
 375	netif_stop_queue(dev);
 376	return 0;
 377}
 378
 379/* Net device start xmit */
 380static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
 381{
 382	struct tun_struct *tun = netdev_priv(dev);
 383
 384	tun_debug(KERN_INFO, tun, "tun_net_xmit %d\n", skb->len);
 385
 386	/* Drop packet if interface is not attached */
 387	if (!tun->tfile)
 388		goto drop;
 389
 390	/* Drop if the filter does not like it.
 391	 * This is a noop if the filter is disabled.
 392	 * Filter can be enabled only for the TAP devices. */
 393	if (!check_filter(&tun->txflt, skb))
 394		goto drop;
 395
 396	if (tun->socket.sk->sk_filter &&
 397	    sk_filter(tun->socket.sk, skb))
 398		goto drop;
 399
 400	if (skb_queue_len(&tun->socket.sk->sk_receive_queue) >= dev->tx_queue_len) {
 401		if (!(tun->flags & TUN_ONE_QUEUE)) {
 402			/* Normal queueing mode. */
 403			/* Packet scheduler handles dropping of further packets. */
 404			netif_stop_queue(dev);
 405
 406			/* We won't see all dropped packets individually, so overrun
 407			 * error is more appropriate. */
 408			dev->stats.tx_fifo_errors++;
 409		} else {
 410			/* Single queue mode.
 411			 * Driver handles dropping of all packets itself. */
 412			goto drop;
 413		}
 414	}
 415
 416	/* Orphan the skb - required as we might hang on to it
 417	 * for indefinite time. */
 418	skb_orphan(skb);
 419
 420	/* Enqueue packet */
 421	skb_queue_tail(&tun->socket.sk->sk_receive_queue, skb);
 422
 423	/* Notify and wake up reader process */
 424	if (tun->flags & TUN_FASYNC)
 425		kill_fasync(&tun->fasync, SIGIO, POLL_IN);
 426	wake_up_interruptible_poll(&tun->wq.wait, POLLIN |
 427				   POLLRDNORM | POLLRDBAND);
 428	return NETDEV_TX_OK;
 429
 430drop:
 431	dev->stats.tx_dropped++;
 432	kfree_skb(skb);
 433	return NETDEV_TX_OK;
 434}
 435
 436static void tun_net_mclist(struct net_device *dev)
 437{
 438	/*
 439	 * This callback is supposed to deal with mc filter in
 440	 * _rx_ path and has nothing to do with the _tx_ path.
 441	 * In rx path we always accept everything userspace gives us.
 442	 */
 443}
 444
 445#define MIN_MTU 68
 446#define MAX_MTU 65535
 447
 448static int
 449tun_net_change_mtu(struct net_device *dev, int new_mtu)
 450{
 451	if (new_mtu < MIN_MTU || new_mtu + dev->hard_header_len > MAX_MTU)
 452		return -EINVAL;
 453	dev->mtu = new_mtu;
 454	return 0;
 455}
 456
 457static netdev_features_t tun_net_fix_features(struct net_device *dev,
 458	netdev_features_t features)
 459{
 460	struct tun_struct *tun = netdev_priv(dev);
 461
 462	return (features & tun->set_features) | (features & ~TUN_USER_FEATURES);
 463}
 464#ifdef CONFIG_NET_POLL_CONTROLLER
 465static void tun_poll_controller(struct net_device *dev)
 466{
 467	/*
 468	 * Tun only receives frames when:
 469	 * 1) the char device endpoint gets data from user space
 470	 * 2) the tun socket gets a sendmsg call from user space
 471	 * Since both of those are syncronous operations, we are guaranteed
 472	 * never to have pending data when we poll for it
 473	 * so theres nothing to do here but return.
 474	 * We need this though so netpoll recognizes us as an interface that
 475	 * supports polling, which enables bridge devices in virt setups to
 476	 * still use netconsole
 477	 */
 478	return;
 479}
 480#endif
 481static const struct net_device_ops tun_netdev_ops = {
 482	.ndo_uninit		= tun_net_uninit,
 483	.ndo_open		= tun_net_open,
 484	.ndo_stop		= tun_net_close,
 485	.ndo_start_xmit		= tun_net_xmit,
 486	.ndo_change_mtu		= tun_net_change_mtu,
 487	.ndo_fix_features	= tun_net_fix_features,
 488#ifdef CONFIG_NET_POLL_CONTROLLER
 489	.ndo_poll_controller	= tun_poll_controller,
 490#endif
 491};
 492
 493static const struct net_device_ops tap_netdev_ops = {
 494	.ndo_uninit		= tun_net_uninit,
 495	.ndo_open		= tun_net_open,
 496	.ndo_stop		= tun_net_close,
 497	.ndo_start_xmit		= tun_net_xmit,
 498	.ndo_change_mtu		= tun_net_change_mtu,
 499	.ndo_fix_features	= tun_net_fix_features,
 500	.ndo_set_rx_mode	= tun_net_mclist,
 501	.ndo_set_mac_address	= eth_mac_addr,
 502	.ndo_validate_addr	= eth_validate_addr,
 503#ifdef CONFIG_NET_POLL_CONTROLLER
 504	.ndo_poll_controller	= tun_poll_controller,
 505#endif
 506};
 507
 508/* Initialize net device. */
 509static void tun_net_init(struct net_device *dev)
 510{
 511	struct tun_struct *tun = netdev_priv(dev);
 512
 513	switch (tun->flags & TUN_TYPE_MASK) {
 514	case TUN_TUN_DEV:
 515		dev->netdev_ops = &tun_netdev_ops;
 516
 517		/* Point-to-Point TUN Device */
 518		dev->hard_header_len = 0;
 519		dev->addr_len = 0;
 520		dev->mtu = 1500;
 521
 522		/* Zero header length */
 523		dev->type = ARPHRD_NONE;
 524		dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
 525		dev->tx_queue_len = TUN_READQ_SIZE;  /* We prefer our own queue length */
 526		break;
 527
 528	case TUN_TAP_DEV:
 529		dev->netdev_ops = &tap_netdev_ops;
 530		/* Ethernet TAP Device */
 531		ether_setup(dev);
 532		dev->priv_flags &= ~IFF_TX_SKB_SHARING;
 533
 534		eth_hw_addr_random(dev);
 535
 536		dev->tx_queue_len = TUN_READQ_SIZE;  /* We prefer our own queue length */
 537		break;
 538	}
 539}
 540
 541/* Character device part */
 542
 543/* Poll */
 544static unsigned int tun_chr_poll(struct file *file, poll_table * wait)
 545{
 546	struct tun_file *tfile = file->private_data;
 547	struct tun_struct *tun = __tun_get(tfile);
 548	struct sock *sk;
 549	unsigned int mask = 0;
 550
 551	if (!tun)
 552		return POLLERR;
 553
 554	sk = tun->socket.sk;
 555
 556	tun_debug(KERN_INFO, tun, "tun_chr_poll\n");
 557
 558	poll_wait(file, &tun->wq.wait, wait);
 559
 560	if (!skb_queue_empty(&sk->sk_receive_queue))
 561		mask |= POLLIN | POLLRDNORM;
 562
 563	if (sock_writeable(sk) ||
 564	    (!test_and_set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags) &&
 565	     sock_writeable(sk)))
 566		mask |= POLLOUT | POLLWRNORM;
 567
 568	if (tun->dev->reg_state != NETREG_REGISTERED)
 569		mask = POLLERR;
 570
 571	tun_put(tun);
 572	return mask;
 573}
 574
 575/* prepad is the amount to reserve at front.  len is length after that.
 576 * linear is a hint as to how much to copy (usually headers). */
 577static struct sk_buff *tun_alloc_skb(struct tun_struct *tun,
 578				     size_t prepad, size_t len,
 579				     size_t linear, int noblock)
 580{
 581	struct sock *sk = tun->socket.sk;
 582	struct sk_buff *skb;
 583	int err;
 584
 585	sock_update_classid(sk);
 586
 587	/* Under a page?  Don't bother with paged skb. */
 588	if (prepad + len < PAGE_SIZE || !linear)
 589		linear = len;
 590
 591	skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock,
 592				   &err);
 593	if (!skb)
 594		return ERR_PTR(err);
 595
 596	skb_reserve(skb, prepad);
 597	skb_put(skb, linear);
 598	skb->data_len = len - linear;
 599	skb->len += len - linear;
 600
 601	return skb;
 602}
 603
 604/* Get packet from user space buffer */
 605static ssize_t tun_get_user(struct tun_struct *tun,
 606			    const struct iovec *iv, size_t count,
 607			    int noblock)
 608{
 609	struct tun_pi pi = { 0, cpu_to_be16(ETH_P_IP) };
 610	struct sk_buff *skb;
 611	size_t len = count, align = NET_SKB_PAD;
 612	struct virtio_net_hdr gso = { 0 };
 613	int offset = 0;
 614
 615	if (!(tun->flags & TUN_NO_PI)) {
 616		if ((len -= sizeof(pi)) > count)
 617			return -EINVAL;
 618
 619		if (memcpy_fromiovecend((void *)&pi, iv, 0, sizeof(pi)))
 620			return -EFAULT;
 621		offset += sizeof(pi);
 622	}
 623
 624	if (tun->flags & TUN_VNET_HDR) {
 625		if ((len -= tun->vnet_hdr_sz) > count)
 626			return -EINVAL;
 627
 628		if (memcpy_fromiovecend((void *)&gso, iv, offset, sizeof(gso)))
 629			return -EFAULT;
 630
 631		if ((gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) &&
 632		    gso.csum_start + gso.csum_offset + 2 > gso.hdr_len)
 633			gso.hdr_len = gso.csum_start + gso.csum_offset + 2;
 634
 635		if (gso.hdr_len > len)
 636			return -EINVAL;
 637		offset += tun->vnet_hdr_sz;
 638	}
 639
 640	if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV) {
 641		align += NET_IP_ALIGN;
 642		if (unlikely(len < ETH_HLEN ||
 643			     (gso.hdr_len && gso.hdr_len < ETH_HLEN)))
 644			return -EINVAL;
 645	}
 646
 647	skb = tun_alloc_skb(tun, align, len, gso.hdr_len, noblock);
 648	if (IS_ERR(skb)) {
 649		if (PTR_ERR(skb) != -EAGAIN)
 650			tun->dev->stats.rx_dropped++;
 651		return PTR_ERR(skb);
 652	}
 653
 654	if (skb_copy_datagram_from_iovec(skb, 0, iv, offset, len)) {
 655		tun->dev->stats.rx_dropped++;
 656		kfree_skb(skb);
 657		return -EFAULT;
 658	}
 659
 660	if (gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
 661		if (!skb_partial_csum_set(skb, gso.csum_start,
 662					  gso.csum_offset)) {
 663			tun->dev->stats.rx_frame_errors++;
 664			kfree_skb(skb);
 665			return -EINVAL;
 666		}
 667	}
 668
 669	switch (tun->flags & TUN_TYPE_MASK) {
 670	case TUN_TUN_DEV:
 671		if (tun->flags & TUN_NO_PI) {
 672			switch (skb->data[0] & 0xf0) {
 673			case 0x40:
 674				pi.proto = htons(ETH_P_IP);
 675				break;
 676			case 0x60:
 677				pi.proto = htons(ETH_P_IPV6);
 678				break;
 679			default:
 680				tun->dev->stats.rx_dropped++;
 681				kfree_skb(skb);
 682				return -EINVAL;
 683			}
 684		}
 685
 686		skb_reset_mac_header(skb);
 687		skb->protocol = pi.proto;
 688		skb->dev = tun->dev;
 689		break;
 690	case TUN_TAP_DEV:
 691		skb->protocol = eth_type_trans(skb, tun->dev);
 692		break;
 693	}
 694
 695	if (gso.gso_type != VIRTIO_NET_HDR_GSO_NONE) {
 696		pr_debug("GSO!\n");
 697		switch (gso.gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
 698		case VIRTIO_NET_HDR_GSO_TCPV4:
 699			skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
 700			break;
 701		case VIRTIO_NET_HDR_GSO_TCPV6:
 702			skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
 703			break;
 704		case VIRTIO_NET_HDR_GSO_UDP:
 705			skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
 706			break;
 707		default:
 708			tun->dev->stats.rx_frame_errors++;
 709			kfree_skb(skb);
 710			return -EINVAL;
 711		}
 712
 713		if (gso.gso_type & VIRTIO_NET_HDR_GSO_ECN)
 714			skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
 715
 716		skb_shinfo(skb)->gso_size = gso.gso_size;
 717		if (skb_shinfo(skb)->gso_size == 0) {
 718			tun->dev->stats.rx_frame_errors++;
 719			kfree_skb(skb);
 720			return -EINVAL;
 721		}
 722
 723		/* Header must be checked, and gso_segs computed. */
 724		skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
 725		skb_shinfo(skb)->gso_segs = 0;
 726	}
 727
 728	netif_rx_ni(skb);
 729
 730	tun->dev->stats.rx_packets++;
 731	tun->dev->stats.rx_bytes += len;
 732
 733	return count;
 734}
 735
 736static ssize_t tun_chr_aio_write(struct kiocb *iocb, const struct iovec *iv,
 737			      unsigned long count, loff_t pos)
 738{
 739	struct file *file = iocb->ki_filp;
 740	struct tun_struct *tun = tun_get(file);
 741	ssize_t result;
 742
 743	if (!tun)
 744		return -EBADFD;
 745
 746	tun_debug(KERN_INFO, tun, "tun_chr_write %ld\n", count);
 747
 748	result = tun_get_user(tun, iv, iov_length(iv, count),
 749			      file->f_flags & O_NONBLOCK);
 750
 751	tun_put(tun);
 752	return result;
 753}
 754
 755/* Put packet to the user space buffer */
 756static ssize_t tun_put_user(struct tun_struct *tun,
 757			    struct sk_buff *skb,
 758			    const struct iovec *iv, int len)
 759{
 760	struct tun_pi pi = { 0, skb->protocol };
 761	ssize_t total = 0;
 762
 763	if (!(tun->flags & TUN_NO_PI)) {
 764		if ((len -= sizeof(pi)) < 0)
 765			return -EINVAL;
 766
 767		if (len < skb->len) {
 768			/* Packet will be striped */
 769			pi.flags |= TUN_PKT_STRIP;
 770		}
 771
 772		if (memcpy_toiovecend(iv, (void *) &pi, 0, sizeof(pi)))
 773			return -EFAULT;
 774		total += sizeof(pi);
 775	}
 776
 777	if (tun->flags & TUN_VNET_HDR) {
 778		struct virtio_net_hdr gso = { 0 }; /* no info leak */
 779		if ((len -= tun->vnet_hdr_sz) < 0)
 780			return -EINVAL;
 781
 782		if (skb_is_gso(skb)) {
 783			struct skb_shared_info *sinfo = skb_shinfo(skb);
 784
 785			/* This is a hint as to how much should be linear. */
 786			gso.hdr_len = skb_headlen(skb);
 787			gso.gso_size = sinfo->gso_size;
 788			if (sinfo->gso_type & SKB_GSO_TCPV4)
 789				gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
 790			else if (sinfo->gso_type & SKB_GSO_TCPV6)
 791				gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
 792			else if (sinfo->gso_type & SKB_GSO_UDP)
 793				gso.gso_type = VIRTIO_NET_HDR_GSO_UDP;
 794			else {
 795				pr_err("unexpected GSO type: "
 796				       "0x%x, gso_size %d, hdr_len %d\n",
 797				       sinfo->gso_type, gso.gso_size,
 798				       gso.hdr_len);
 799				print_hex_dump(KERN_ERR, "tun: ",
 800					       DUMP_PREFIX_NONE,
 801					       16, 1, skb->head,
 802					       min((int)gso.hdr_len, 64), true);
 803				WARN_ON_ONCE(1);
 804				return -EINVAL;
 805			}
 806			if (sinfo->gso_type & SKB_GSO_TCP_ECN)
 807				gso.gso_type |= VIRTIO_NET_HDR_GSO_ECN;
 808		} else
 809			gso.gso_type = VIRTIO_NET_HDR_GSO_NONE;
 810
 811		if (skb->ip_summed == CHECKSUM_PARTIAL) {
 812			gso.flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
 813			gso.csum_start = skb_checksum_start_offset(skb);
 814			gso.csum_offset = skb->csum_offset;
 815		} else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
 816			gso.flags = VIRTIO_NET_HDR_F_DATA_VALID;
 817		} /* else everything is zero */
 818
 819		if (unlikely(memcpy_toiovecend(iv, (void *)&gso, total,
 820					       sizeof(gso))))
 821			return -EFAULT;
 822		total += tun->vnet_hdr_sz;
 823	}
 824
 825	len = min_t(int, skb->len, len);
 826
 827	skb_copy_datagram_const_iovec(skb, 0, iv, total, len);
 828	total += skb->len;
 829
 830	tun->dev->stats.tx_packets++;
 831	tun->dev->stats.tx_bytes += len;
 832
 833	return total;
 834}
 835
 836static ssize_t tun_do_read(struct tun_struct *tun,
 837			   struct kiocb *iocb, const struct iovec *iv,
 838			   ssize_t len, int noblock)
 839{
 840	DECLARE_WAITQUEUE(wait, current);
 841	struct sk_buff *skb;
 842	ssize_t ret = 0;
 843
 844	tun_debug(KERN_INFO, tun, "tun_chr_read\n");
 845
 846	if (unlikely(!noblock))
 847		add_wait_queue(&tun->wq.wait, &wait);
 848	while (len) {
 849		current->state = TASK_INTERRUPTIBLE;
 850
 851		/* Read frames from the queue */
 852		if (!(skb=skb_dequeue(&tun->socket.sk->sk_receive_queue))) {
 853			if (noblock) {
 854				ret = -EAGAIN;
 855				break;
 856			}
 857			if (signal_pending(current)) {
 858				ret = -ERESTARTSYS;
 859				break;
 860			}
 861			if (tun->dev->reg_state != NETREG_REGISTERED) {
 862				ret = -EIO;
 863				break;
 864			}
 865
 866			/* Nothing to read, let's sleep */
 867			schedule();
 868			continue;
 869		}
 870		netif_wake_queue(tun->dev);
 871
 872		ret = tun_put_user(tun, skb, iv, len);
 873		kfree_skb(skb);
 874		break;
 875	}
 876
 877	current->state = TASK_RUNNING;
 878	if (unlikely(!noblock))
 879		remove_wait_queue(&tun->wq.wait, &wait);
 880
 881	return ret;
 882}
 883
 884static ssize_t tun_chr_aio_read(struct kiocb *iocb, const struct iovec *iv,
 885			    unsigned long count, loff_t pos)
 886{
 887	struct file *file = iocb->ki_filp;
 888	struct tun_file *tfile = file->private_data;
 889	struct tun_struct *tun = __tun_get(tfile);
 890	ssize_t len, ret;
 891
 892	if (!tun)
 893		return -EBADFD;
 894	len = iov_length(iv, count);
 895	if (len < 0) {
 896		ret = -EINVAL;
 897		goto out;
 898	}
 899
 900	ret = tun_do_read(tun, iocb, iv, len, file->f_flags & O_NONBLOCK);
 901	ret = min_t(ssize_t, ret, len);
 902out:
 903	tun_put(tun);
 904	return ret;
 905}
 906
 907static void tun_setup(struct net_device *dev)
 908{
 909	struct tun_struct *tun = netdev_priv(dev);
 910
 911	tun->owner = -1;
 912	tun->group = -1;
 913
 914	dev->ethtool_ops = &tun_ethtool_ops;
 915	dev->destructor = tun_free_netdev;
 916}
 917
 918/* Trivial set of netlink ops to allow deleting tun or tap
 919 * device with netlink.
 920 */
 921static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
 922{
 923	return -EINVAL;
 924}
 925
 926static struct rtnl_link_ops tun_link_ops __read_mostly = {
 927	.kind		= DRV_NAME,
 928	.priv_size	= sizeof(struct tun_struct),
 929	.setup		= tun_setup,
 930	.validate	= tun_validate,
 931};
 932
 933static void tun_sock_write_space(struct sock *sk)
 934{
 935	struct tun_struct *tun;
 936	wait_queue_head_t *wqueue;
 937
 938	if (!sock_writeable(sk))
 939		return;
 940
 941	if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags))
 942		return;
 943
 944	wqueue = sk_sleep(sk);
 945	if (wqueue && waitqueue_active(wqueue))
 946		wake_up_interruptible_sync_poll(wqueue, POLLOUT |
 947						POLLWRNORM | POLLWRBAND);
 948
 949	tun = tun_sk(sk)->tun;
 950	kill_fasync(&tun->fasync, SIGIO, POLL_OUT);
 951}
 952
 953static void tun_sock_destruct(struct sock *sk)
 954{
 955	free_netdev(tun_sk(sk)->tun->dev);
 956}
 957
 958static int tun_sendmsg(struct kiocb *iocb, struct socket *sock,
 959		       struct msghdr *m, size_t total_len)
 960{
 961	struct tun_struct *tun = container_of(sock, struct tun_struct, socket);
 962	return tun_get_user(tun, m->msg_iov, total_len,
 963			    m->msg_flags & MSG_DONTWAIT);
 964}
 965
 966static int tun_recvmsg(struct kiocb *iocb, struct socket *sock,
 967		       struct msghdr *m, size_t total_len,
 968		       int flags)
 969{
 970	struct tun_struct *tun = container_of(sock, struct tun_struct, socket);
 971	int ret;
 972	if (flags & ~(MSG_DONTWAIT|MSG_TRUNC))
 973		return -EINVAL;
 974	ret = tun_do_read(tun, iocb, m->msg_iov, total_len,
 975			  flags & MSG_DONTWAIT);
 976	if (ret > total_len) {
 977		m->msg_flags |= MSG_TRUNC;
 978		ret = flags & MSG_TRUNC ? ret : total_len;
 979	}
 980	return ret;
 981}
 982
 983static int tun_release(struct socket *sock)
 984{
 985	if (sock->sk)
 986		sock_put(sock->sk);
 987	return 0;
 988}
 989
 990/* Ops structure to mimic raw sockets with tun */
 991static const struct proto_ops tun_socket_ops = {
 992	.sendmsg = tun_sendmsg,
 993	.recvmsg = tun_recvmsg,
 994	.release = tun_release,
 995};
 996
 997static struct proto tun_proto = {
 998	.name		= "tun",
 999	.owner		= THIS_MODULE,
1000	.obj_size	= sizeof(struct tun_sock),
1001};
1002
1003static int tun_flags(struct tun_struct *tun)
1004{
1005	int flags = 0;
1006
1007	if (tun->flags & TUN_TUN_DEV)
1008		flags |= IFF_TUN;
1009	else
1010		flags |= IFF_TAP;
1011
1012	if (tun->flags & TUN_NO_PI)
1013		flags |= IFF_NO_PI;
1014
1015	if (tun->flags & TUN_ONE_QUEUE)
1016		flags |= IFF_ONE_QUEUE;
1017
1018	if (tun->flags & TUN_VNET_HDR)
1019		flags |= IFF_VNET_HDR;
1020
1021	return flags;
1022}
1023
1024static ssize_t tun_show_flags(struct device *dev, struct device_attribute *attr,
1025			      char *buf)
1026{
1027	struct tun_struct *tun = netdev_priv(to_net_dev(dev));
1028	return sprintf(buf, "0x%x\n", tun_flags(tun));
1029}
1030
1031static ssize_t tun_show_owner(struct device *dev, struct device_attribute *attr,
1032			      char *buf)
1033{
1034	struct tun_struct *tun = netdev_priv(to_net_dev(dev));
1035	return sprintf(buf, "%d\n", tun->owner);
1036}
1037
1038static ssize_t tun_show_group(struct device *dev, struct device_attribute *attr,
1039			      char *buf)
1040{
1041	struct tun_struct *tun = netdev_priv(to_net_dev(dev));
1042	return sprintf(buf, "%d\n", tun->group);
1043}
1044
1045static DEVICE_ATTR(tun_flags, 0444, tun_show_flags, NULL);
1046static DEVICE_ATTR(owner, 0444, tun_show_owner, NULL);
1047static DEVICE_ATTR(group, 0444, tun_show_group, NULL);
1048
1049static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
1050{
1051	struct sock *sk;
1052	struct tun_struct *tun;
1053	struct net_device *dev;
1054	int err;
1055
1056	dev = __dev_get_by_name(net, ifr->ifr_name);
1057	if (dev) {
1058		const struct cred *cred = current_cred();
1059
1060		if (ifr->ifr_flags & IFF_TUN_EXCL)
1061			return -EBUSY;
1062		if ((ifr->ifr_flags & IFF_TUN) && dev->netdev_ops == &tun_netdev_ops)
1063			tun = netdev_priv(dev);
1064		else if ((ifr->ifr_flags & IFF_TAP) && dev->netdev_ops == &tap_netdev_ops)
1065			tun = netdev_priv(dev);
1066		else
1067			return -EINVAL;
1068
1069		if (((tun->owner != -1 && cred->euid != tun->owner) ||
1070		     (tun->group != -1 && !in_egroup_p(tun->group))) &&
1071		    !capable(CAP_NET_ADMIN))
1072			return -EPERM;
1073		err = security_tun_dev_attach(tun->socket.sk);
1074		if (err < 0)
1075			return err;
1076
1077		err = tun_attach(tun, file);
1078		if (err < 0)
1079			return err;
1080	}
1081	else {
1082		char *name;
1083		unsigned long flags = 0;
1084
1085		if (!capable(CAP_NET_ADMIN))
1086			return -EPERM;
1087		err = security_tun_dev_create();
1088		if (err < 0)
1089			return err;
1090
1091		/* Set dev type */
1092		if (ifr->ifr_flags & IFF_TUN) {
1093			/* TUN device */
1094			flags |= TUN_TUN_DEV;
1095			name = "tun%d";
1096		} else if (ifr->ifr_flags & IFF_TAP) {
1097			/* TAP device */
1098			flags |= TUN_TAP_DEV;
1099			name = "tap%d";
1100		} else
1101			return -EINVAL;
1102
1103		if (*ifr->ifr_name)
1104			name = ifr->ifr_name;
1105
1106		dev = alloc_netdev(sizeof(struct tun_struct), name,
1107				   tun_setup);
1108		if (!dev)
1109			return -ENOMEM;
1110
1111		dev_net_set(dev, net);
1112		dev->rtnl_link_ops = &tun_link_ops;
1113
1114		tun = netdev_priv(dev);
1115		tun->dev = dev;
1116		tun->flags = flags;
1117		tun->txflt.count = 0;
1118		tun->vnet_hdr_sz = sizeof(struct virtio_net_hdr);
1119		set_bit(SOCK_EXTERNALLY_ALLOCATED, &tun->socket.flags);
1120
1121		err = -ENOMEM;
1122		sk = sk_alloc(&init_net, AF_UNSPEC, GFP_KERNEL, &tun_proto);
1123		if (!sk)
1124			goto err_free_dev;
1125
1126		sk_change_net(sk, net);
1127		tun->socket.wq = &tun->wq;
1128		init_waitqueue_head(&tun->wq.wait);
1129		tun->socket.ops = &tun_socket_ops;
1130		sock_init_data(&tun->socket, sk);
1131		sk->sk_write_space = tun_sock_write_space;
1132		sk->sk_sndbuf = INT_MAX;
1133
1134		tun_sk(sk)->tun = tun;
1135
1136		security_tun_dev_post_create(sk);
1137
1138		tun_net_init(dev);
1139
1140		dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST |
1141			TUN_USER_FEATURES;
1142		dev->features = dev->hw_features;
1143
1144		err = register_netdevice(tun->dev);
1145		if (err < 0)
1146			goto err_free_sk;
1147
1148		if (device_create_file(&tun->dev->dev, &dev_attr_tun_flags) ||
1149		    device_create_file(&tun->dev->dev, &dev_attr_owner) ||
1150		    device_create_file(&tun->dev->dev, &dev_attr_group))
1151			pr_err("Failed to create tun sysfs files\n");
1152
1153		sk->sk_destruct = tun_sock_destruct;
1154
1155		err = tun_attach(tun, file);
1156		if (err < 0)
1157			goto failed;
1158	}
1159
1160	tun_debug(KERN_INFO, tun, "tun_set_iff\n");
1161
1162	if (ifr->ifr_flags & IFF_NO_PI)
1163		tun->flags |= TUN_NO_PI;
1164	else
1165		tun->flags &= ~TUN_NO_PI;
1166
1167	if (ifr->ifr_flags & IFF_ONE_QUEUE)
1168		tun->flags |= TUN_ONE_QUEUE;
1169	else
1170		tun->flags &= ~TUN_ONE_QUEUE;
1171
1172	if (ifr->ifr_flags & IFF_VNET_HDR)
1173		tun->flags |= TUN_VNET_HDR;
1174	else
1175		tun->flags &= ~TUN_VNET_HDR;
1176
1177	/* Make sure persistent devices do not get stuck in
1178	 * xoff state.
1179	 */
1180	if (netif_running(tun->dev))
1181		netif_wake_queue(tun->dev);
1182
1183	strcpy(ifr->ifr_name, tun->dev->name);
1184	return 0;
1185
1186 err_free_sk:
1187	tun_free_netdev(dev);
1188 err_free_dev:
1189	free_netdev(dev);
1190 failed:
1191	return err;
1192}
1193
1194static int tun_get_iff(struct net *net, struct tun_struct *tun,
1195		       struct ifreq *ifr)
1196{
1197	tun_debug(KERN_INFO, tun, "tun_get_iff\n");
1198
1199	strcpy(ifr->ifr_name, tun->dev->name);
1200
1201	ifr->ifr_flags = tun_flags(tun);
1202
1203	return 0;
1204}
1205
1206/* This is like a cut-down ethtool ops, except done via tun fd so no
1207 * privs required. */
1208static int set_offload(struct tun_struct *tun, unsigned long arg)
1209{
1210	netdev_features_t features = 0;
1211
1212	if (arg & TUN_F_CSUM) {
1213		features |= NETIF_F_HW_CSUM;
1214		arg &= ~TUN_F_CSUM;
1215
1216		if (arg & (TUN_F_TSO4|TUN_F_TSO6)) {
1217			if (arg & TUN_F_TSO_ECN) {
1218				features |= NETIF_F_TSO_ECN;
1219				arg &= ~TUN_F_TSO_ECN;
1220			}
1221			if (arg & TUN_F_TSO4)
1222				features |= NETIF_F_TSO;
1223			if (arg & TUN_F_TSO6)
1224				features |= NETIF_F_TSO6;
1225			arg &= ~(TUN_F_TSO4|TUN_F_TSO6);
1226		}
1227
1228		if (arg & TUN_F_UFO) {
1229			features |= NETIF_F_UFO;
1230			arg &= ~TUN_F_UFO;
1231		}
1232	}
1233
1234	/* This gives the user a way to test for new features in future by
1235	 * trying to set them. */
1236	if (arg)
1237		return -EINVAL;
1238
1239	tun->set_features = features;
1240	netdev_update_features(tun->dev);
1241
1242	return 0;
1243}
1244
1245static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
1246			    unsigned long arg, int ifreq_len)
1247{
1248	struct tun_file *tfile = file->private_data;
1249	struct tun_struct *tun;
1250	void __user* argp = (void __user*)arg;
1251	struct sock_fprog fprog;
1252	struct ifreq ifr;
1253	int sndbuf;
1254	int vnet_hdr_sz;
1255	int ret;
1256
1257	if (cmd == TUNSETIFF || _IOC_TYPE(cmd) == 0x89) {
1258		if (copy_from_user(&ifr, argp, ifreq_len))
1259			return -EFAULT;
1260	} else {
1261		memset(&ifr, 0, sizeof(ifr));
1262	}
1263	if (cmd == TUNGETFEATURES) {
1264		/* Currently this just means: "what IFF flags are valid?".
1265		 * This is needed because we never checked for invalid flags on
1266		 * TUNSETIFF. */
1267		return put_user(IFF_TUN | IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE |
1268				IFF_VNET_HDR,
1269				(unsigned int __user*)argp);
1270	}
1271
1272	rtnl_lock();
1273
1274	tun = __tun_get(tfile);
1275	if (cmd == TUNSETIFF && !tun) {
1276		ifr.ifr_name[IFNAMSIZ-1] = '\0';
1277
1278		ret = tun_set_iff(tfile->net, file, &ifr);
1279
1280		if (ret)
1281			goto unlock;
1282
1283		if (copy_to_user(argp, &ifr, ifreq_len))
1284			ret = -EFAULT;
1285		goto unlock;
1286	}
1287
1288	ret = -EBADFD;
1289	if (!tun)
1290		goto unlock;
1291
1292	tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %d\n", cmd);
1293
1294	ret = 0;
1295	switch (cmd) {
1296	case TUNGETIFF:
1297		ret = tun_get_iff(current->nsproxy->net_ns, tun, &ifr);
1298		if (ret)
1299			break;
1300
1301		if (copy_to_user(argp, &ifr, ifreq_len))
1302			ret = -EFAULT;
1303		break;
1304
1305	case TUNSETNOCSUM:
1306		/* Disable/Enable checksum */
1307
1308		/* [unimplemented] */
1309		tun_debug(KERN_INFO, tun, "ignored: set checksum %s\n",
1310			  arg ? "disabled" : "enabled");
1311		break;
1312
1313	case TUNSETPERSIST:
1314		/* Disable/Enable persist mode */
1315		if (arg)
1316			tun->flags |= TUN_PERSIST;
1317		else
1318			tun->flags &= ~TUN_PERSIST;
1319
1320		tun_debug(KERN_INFO, tun, "persist %s\n",
1321			  arg ? "enabled" : "disabled");
1322		break;
1323
1324	case TUNSETOWNER:
1325		/* Set owner of the device */
1326		tun->owner = (uid_t) arg;
1327
1328		tun_debug(KERN_INFO, tun, "owner set to %d\n", tun->owner);
1329		break;
1330
1331	case TUNSETGROUP:
1332		/* Set group of the device */
1333		tun->group= (gid_t) arg;
1334
1335		tun_debug(KERN_INFO, tun, "group set to %d\n", tun->group);
1336		break;
1337
1338	case TUNSETLINK:
1339		/* Only allow setting the type when the interface is down */
1340		if (tun->dev->flags & IFF_UP) {
1341			tun_debug(KERN_INFO, tun,
1342				  "Linktype set failed because interface is up\n");
1343			ret = -EBUSY;
1344		} else {
1345			tun->dev->type = (int) arg;
1346			tun_debug(KERN_INFO, tun, "linktype set to %d\n",
1347				  tun->dev->type);
1348			ret = 0;
1349		}
1350		break;
1351
1352#ifdef TUN_DEBUG
1353	case TUNSETDEBUG:
1354		tun->debug = arg;
1355		break;
1356#endif
1357	case TUNSETOFFLOAD:
1358		ret = set_offload(tun, arg);
1359		break;
1360
1361	case TUNSETTXFILTER:
1362		/* Can be set only for TAPs */
1363		ret = -EINVAL;
1364		if ((tun->flags & TUN_TYPE_MASK) != TUN_TAP_DEV)
1365			break;
1366		ret = update_filter(&tun->txflt, (void __user *)arg);
1367		break;
1368
1369	case SIOCGIFHWADDR:
1370		/* Get hw address */
1371		memcpy(ifr.ifr_hwaddr.sa_data, tun->dev->dev_addr, ETH_ALEN);
1372		ifr.ifr_hwaddr.sa_family = tun->dev->type;
1373		if (copy_to_user(argp, &ifr, ifreq_len))
1374			ret = -EFAULT;
1375		break;
1376
1377	case SIOCSIFHWADDR:
1378		/* Set hw address */
1379		tun_debug(KERN_DEBUG, tun, "set hw address: %pM\n",
1380			  ifr.ifr_hwaddr.sa_data);
1381
1382		ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr);
1383		break;
1384
1385	case TUNGETSNDBUF:
1386		sndbuf = tun->socket.sk->sk_sndbuf;
1387		if (copy_to_user(argp, &sndbuf, sizeof(sndbuf)))
1388			ret = -EFAULT;
1389		break;
1390
1391	case TUNSETSNDBUF:
1392		if (copy_from_user(&sndbuf, argp, sizeof(sndbuf))) {
1393			ret = -EFAULT;
1394			break;
1395		}
1396
1397		tun->socket.sk->sk_sndbuf = sndbuf;
1398		break;
1399
1400	case TUNGETVNETHDRSZ:
1401		vnet_hdr_sz = tun->vnet_hdr_sz;
1402		if (copy_to_user(argp, &vnet_hdr_sz, sizeof(vnet_hdr_sz)))
1403			ret = -EFAULT;
1404		break;
1405
1406	case TUNSETVNETHDRSZ:
1407		if (copy_from_user(&vnet_hdr_sz, argp, sizeof(vnet_hdr_sz))) {
1408			ret = -EFAULT;
1409			break;
1410		}
1411		if (vnet_hdr_sz < (int)sizeof(struct virtio_net_hdr)) {
1412			ret = -EINVAL;
1413			break;
1414		}
1415
1416		tun->vnet_hdr_sz = vnet_hdr_sz;
1417		break;
1418
1419	case TUNATTACHFILTER:
1420		/* Can be set only for TAPs */
1421		ret = -EINVAL;
1422		if ((tun->flags & TUN_TYPE_MASK) != TUN_TAP_DEV)
1423			break;
1424		ret = -EFAULT;
1425		if (copy_from_user(&fprog, argp, sizeof(fprog)))
1426			break;
1427
1428		ret = sk_attach_filter(&fprog, tun->socket.sk);
1429		break;
1430
1431	case TUNDETACHFILTER:
1432		/* Can be set only for TAPs */
1433		ret = -EINVAL;
1434		if ((tun->flags & TUN_TYPE_MASK) != TUN_TAP_DEV)
1435			break;
1436		ret = sk_detach_filter(tun->socket.sk);
1437		break;
1438
1439	default:
1440		ret = -EINVAL;
1441		break;
1442	}
1443
1444unlock:
1445	rtnl_unlock();
1446	if (tun)
1447		tun_put(tun);
1448	return ret;
1449}
1450
1451static long tun_chr_ioctl(struct file *file,
1452			  unsigned int cmd, unsigned long arg)
1453{
1454	return __tun_chr_ioctl(file, cmd, arg, sizeof (struct ifreq));
1455}
1456
1457#ifdef CONFIG_COMPAT
1458static long tun_chr_compat_ioctl(struct file *file,
1459			 unsigned int cmd, unsigned long arg)
1460{
1461	switch (cmd) {
1462	case TUNSETIFF:
1463	case TUNGETIFF:
1464	case TUNSETTXFILTER:
1465	case TUNGETSNDBUF:
1466	case TUNSETSNDBUF:
1467	case SIOCGIFHWADDR:
1468	case SIOCSIFHWADDR:
1469		arg = (unsigned long)compat_ptr(arg);
1470		break;
1471	default:
1472		arg = (compat_ulong_t)arg;
1473		break;
1474	}
1475
1476	/*
1477	 * compat_ifreq is shorter than ifreq, so we must not access beyond
1478	 * the end of that structure. All fields that are used in this
1479	 * driver are compatible though, we don't need to convert the
1480	 * contents.
1481	 */
1482	return __tun_chr_ioctl(file, cmd, arg, sizeof(struct compat_ifreq));
1483}
1484#endif /* CONFIG_COMPAT */
1485
1486static int tun_chr_fasync(int fd, struct file *file, int on)
1487{
1488	struct tun_struct *tun = tun_get(file);
1489	int ret;
1490
1491	if (!tun)
1492		return -EBADFD;
1493
1494	tun_debug(KERN_INFO, tun, "tun_chr_fasync %d\n", on);
1495
1496	if ((ret = fasync_helper(fd, file, on, &tun->fasync)) < 0)
1497		goto out;
1498
1499	if (on) {
1500		ret = __f_setown(file, task_pid(current), PIDTYPE_PID, 0);
1501		if (ret)
1502			goto out;
1503		tun->flags |= TUN_FASYNC;
1504	} else
1505		tun->flags &= ~TUN_FASYNC;
1506	ret = 0;
1507out:
1508	tun_put(tun);
1509	return ret;
1510}
1511
1512static int tun_chr_open(struct inode *inode, struct file * file)
1513{
1514	struct tun_file *tfile;
1515
1516	DBG1(KERN_INFO, "tunX: tun_chr_open\n");
1517
1518	tfile = kmalloc(sizeof(*tfile), GFP_KERNEL);
1519	if (!tfile)
1520		return -ENOMEM;
1521	atomic_set(&tfile->count, 0);
1522	tfile->tun = NULL;
1523	tfile->net = get_net(current->nsproxy->net_ns);
1524	file->private_data = tfile;
1525	return 0;
1526}
1527
1528static int tun_chr_close(struct inode *inode, struct file *file)
1529{
1530	struct tun_file *tfile = file->private_data;
1531	struct tun_struct *tun;
1532
1533	tun = __tun_get(tfile);
1534	if (tun) {
1535		struct net_device *dev = tun->dev;
1536
1537		tun_debug(KERN_INFO, tun, "tun_chr_close\n");
1538
1539		__tun_detach(tun);
1540
1541		/* If desirable, unregister the netdevice. */
1542		if (!(tun->flags & TUN_PERSIST)) {
1543			rtnl_lock();
1544			if (dev->reg_state == NETREG_REGISTERED)
1545				unregister_netdevice(dev);
1546			rtnl_unlock();
1547		}
1548	}
1549
1550	tun = tfile->tun;
1551	if (tun)
1552		sock_put(tun->socket.sk);
1553
1554	put_net(tfile->net);
1555	kfree(tfile);
1556
1557	return 0;
1558}
1559
1560static const struct file_operations tun_fops = {
1561	.owner	= THIS_MODULE,
1562	.llseek = no_llseek,
1563	.read  = do_sync_read,
1564	.aio_read  = tun_chr_aio_read,
1565	.write = do_sync_write,
1566	.aio_write = tun_chr_aio_write,
1567	.poll	= tun_chr_poll,
1568	.unlocked_ioctl	= tun_chr_ioctl,
1569#ifdef CONFIG_COMPAT
1570	.compat_ioctl = tun_chr_compat_ioctl,
1571#endif
1572	.open	= tun_chr_open,
1573	.release = tun_chr_close,
1574	.fasync = tun_chr_fasync
1575};
1576
1577static struct miscdevice tun_miscdev = {
1578	.minor = TUN_MINOR,
1579	.name = "tun",
1580	.nodename = "net/tun",
1581	.fops = &tun_fops,
1582};
1583
1584/* ethtool interface */
1585
1586static int tun_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1587{
1588	cmd->supported		= 0;
1589	cmd->advertising	= 0;
1590	ethtool_cmd_speed_set(cmd, SPEED_10);
1591	cmd->duplex		= DUPLEX_FULL;
1592	cmd->port		= PORT_TP;
1593	cmd->phy_address	= 0;
1594	cmd->transceiver	= XCVR_INTERNAL;
1595	cmd->autoneg		= AUTONEG_DISABLE;
1596	cmd->maxtxpkt		= 0;
1597	cmd->maxrxpkt		= 0;
1598	return 0;
1599}
1600
1601static void tun_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1602{
1603	struct tun_struct *tun = netdev_priv(dev);
1604
1605	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1606	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1607
1608	switch (tun->flags & TUN_TYPE_MASK) {
1609	case TUN_TUN_DEV:
1610		strlcpy(info->bus_info, "tun", sizeof(info->bus_info));
1611		break;
1612	case TUN_TAP_DEV:
1613		strlcpy(info->bus_info, "tap", sizeof(info->bus_info));
1614		break;
1615	}
1616}
1617
1618static u32 tun_get_msglevel(struct net_device *dev)
1619{
1620#ifdef TUN_DEBUG
1621	struct tun_struct *tun = netdev_priv(dev);
1622	return tun->debug;
1623#else
1624	return -EOPNOTSUPP;
1625#endif
1626}
1627
1628static void tun_set_msglevel(struct net_device *dev, u32 value)
1629{
1630#ifdef TUN_DEBUG
1631	struct tun_struct *tun = netdev_priv(dev);
1632	tun->debug = value;
1633#endif
1634}
1635
1636static const struct ethtool_ops tun_ethtool_ops = {
1637	.get_settings	= tun_get_settings,
1638	.get_drvinfo	= tun_get_drvinfo,
1639	.get_msglevel	= tun_get_msglevel,
1640	.set_msglevel	= tun_set_msglevel,
1641	.get_link	= ethtool_op_get_link,
1642};
1643
1644
1645static int __init tun_init(void)
1646{
1647	int ret = 0;
1648
1649	pr_info("%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
1650	pr_info("%s\n", DRV_COPYRIGHT);
1651
1652	ret = rtnl_link_register(&tun_link_ops);
1653	if (ret) {
1654		pr_err("Can't register link_ops\n");
1655		goto err_linkops;
1656	}
1657
1658	ret = misc_register(&tun_miscdev);
1659	if (ret) {
1660		pr_err("Can't register misc device %d\n", TUN_MINOR);
1661		goto err_misc;
1662	}
1663	return  0;
1664err_misc:
1665	rtnl_link_unregister(&tun_link_ops);
1666err_linkops:
1667	return ret;
1668}
1669
1670static void tun_cleanup(void)
1671{
1672	misc_deregister(&tun_miscdev);
1673	rtnl_link_unregister(&tun_link_ops);
1674}
1675
1676/* Get an underlying socket object from tun file.  Returns error unless file is
1677 * attached to a device.  The returned object works like a packet socket, it
1678 * can be used for sock_sendmsg/sock_recvmsg.  The caller is responsible for
1679 * holding a reference to the file for as long as the socket is in use. */
1680struct socket *tun_get_socket(struct file *file)
1681{
1682	struct tun_struct *tun;
1683	if (file->f_op != &tun_fops)
1684		return ERR_PTR(-EINVAL);
1685	tun = tun_get(file);
1686	if (!tun)
1687		return ERR_PTR(-EBADFD);
1688	tun_put(tun);
1689	return &tun->socket;
1690}
1691EXPORT_SYMBOL_GPL(tun_get_socket);
1692
1693module_init(tun_init);
1694module_exit(tun_cleanup);
1695MODULE_DESCRIPTION(DRV_DESCRIPTION);
1696MODULE_AUTHOR(DRV_COPYRIGHT);
1697MODULE_LICENSE("GPL");
1698MODULE_ALIAS_MISCDEV(TUN_MINOR);
1699MODULE_ALIAS("devname:net/tun");