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