]> err.no Git - linux-2.6/blob - net/packet/af_packet.c
ipv4: replace dst_metric() with dst_mtu() in net/ipv4/route.c.
[linux-2.6] / net / packet / af_packet.c
1 /*
2  * INET         An implementation of the TCP/IP protocol suite for the LINUX
3  *              operating system.  INET is implemented using the  BSD Socket
4  *              interface as the means of communication with the user level.
5  *
6  *              PACKET - implements raw packet sockets.
7  *
8  * Authors:     Ross Biro
9  *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
10  *              Alan Cox, <gw4pts@gw4pts.ampr.org>
11  *
12  * Fixes:
13  *              Alan Cox        :       verify_area() now used correctly
14  *              Alan Cox        :       new skbuff lists, look ma no backlogs!
15  *              Alan Cox        :       tidied skbuff lists.
16  *              Alan Cox        :       Now uses generic datagram routines I
17  *                                      added. Also fixed the peek/read crash
18  *                                      from all old Linux datagram code.
19  *              Alan Cox        :       Uses the improved datagram code.
20  *              Alan Cox        :       Added NULL's for socket options.
21  *              Alan Cox        :       Re-commented the code.
22  *              Alan Cox        :       Use new kernel side addressing
23  *              Rob Janssen     :       Correct MTU usage.
24  *              Dave Platt      :       Counter leaks caused by incorrect
25  *                                      interrupt locking and some slightly
26  *                                      dubious gcc output. Can you read
27  *                                      compiler: it said _VOLATILE_
28  *      Richard Kooijman        :       Timestamp fixes.
29  *              Alan Cox        :       New buffers. Use sk->mac.raw.
30  *              Alan Cox        :       sendmsg/recvmsg support.
31  *              Alan Cox        :       Protocol setting support
32  *      Alexey Kuznetsov        :       Untied from IPv4 stack.
33  *      Cyrus Durgin            :       Fixed kerneld for kmod.
34  *      Michal Ostrowski        :       Module initialization cleanup.
35  *         Ulises Alonso        :       Frame number limit removal and
36  *                                      packet_set_ring memory leak.
37  *              Eric Biederman  :       Allow for > 8 byte hardware addresses.
38  *                                      The convention is that longer addresses
39  *                                      will simply extend the hardware address
40  *                                      byte arrays at the end of sockaddr_ll
41  *                                      and packet_mreq.
42  *
43  *              This program is free software; you can redistribute it and/or
44  *              modify it under the terms of the GNU General Public License
45  *              as published by the Free Software Foundation; either version
46  *              2 of the License, or (at your option) any later version.
47  *
48  */
49
50 #include <linux/types.h>
51 #include <linux/mm.h>
52 #include <linux/capability.h>
53 #include <linux/fcntl.h>
54 #include <linux/socket.h>
55 #include <linux/in.h>
56 #include <linux/inet.h>
57 #include <linux/netdevice.h>
58 #include <linux/if_packet.h>
59 #include <linux/wireless.h>
60 #include <linux/kernel.h>
61 #include <linux/kmod.h>
62 #include <net/net_namespace.h>
63 #include <net/ip.h>
64 #include <net/protocol.h>
65 #include <linux/skbuff.h>
66 #include <net/sock.h>
67 #include <linux/errno.h>
68 #include <linux/timer.h>
69 #include <asm/system.h>
70 #include <asm/uaccess.h>
71 #include <asm/ioctls.h>
72 #include <asm/page.h>
73 #include <asm/cacheflush.h>
74 #include <asm/io.h>
75 #include <linux/proc_fs.h>
76 #include <linux/seq_file.h>
77 #include <linux/poll.h>
78 #include <linux/module.h>
79 #include <linux/init.h>
80
81 #ifdef CONFIG_INET
82 #include <net/inet_common.h>
83 #endif
84
85 /*
86    Assumptions:
87    - if device has no dev->hard_header routine, it adds and removes ll header
88      inside itself. In this case ll header is invisible outside of device,
89      but higher levels still should reserve dev->hard_header_len.
90      Some devices are enough clever to reallocate skb, when header
91      will not fit to reserved space (tunnel), another ones are silly
92      (PPP).
93    - packet socket receives packets with pulled ll header,
94      so that SOCK_RAW should push it back.
95
96 On receive:
97 -----------
98
99 Incoming, dev->hard_header!=NULL
100    mac_header -> ll header
101    data       -> data
102
103 Outgoing, dev->hard_header!=NULL
104    mac_header -> ll header
105    data       -> ll header
106
107 Incoming, dev->hard_header==NULL
108    mac_header -> UNKNOWN position. It is very likely, that it points to ll
109                  header.  PPP makes it, that is wrong, because introduce
110                  assymetry between rx and tx paths.
111    data       -> data
112
113 Outgoing, dev->hard_header==NULL
114    mac_header -> data. ll header is still not built!
115    data       -> data
116
117 Resume
118   If dev->hard_header==NULL we are unlikely to restore sensible ll header.
119
120
121 On transmit:
122 ------------
123
124 dev->hard_header != NULL
125    mac_header -> ll header
126    data       -> ll header
127
128 dev->hard_header == NULL (ll header is added by device, we cannot control it)
129    mac_header -> data
130    data       -> data
131
132    We should set nh.raw on output to correct posistion,
133    packet classifier depends on it.
134  */
135
136 /* Private packet socket structures. */
137
138 struct packet_mclist
139 {
140         struct packet_mclist    *next;
141         int                     ifindex;
142         int                     count;
143         unsigned short          type;
144         unsigned short          alen;
145         unsigned char           addr[MAX_ADDR_LEN];
146 };
147 /* identical to struct packet_mreq except it has
148  * a longer address field.
149  */
150 struct packet_mreq_max
151 {
152         int             mr_ifindex;
153         unsigned short  mr_type;
154         unsigned short  mr_alen;
155         unsigned char   mr_address[MAX_ADDR_LEN];
156 };
157
158 #ifdef CONFIG_PACKET_MMAP
159 static int packet_set_ring(struct sock *sk, struct tpacket_req *req, int closing);
160 #endif
161
162 static void packet_flush_mclist(struct sock *sk);
163
164 struct packet_sock {
165         /* struct sock has to be the first member of packet_sock */
166         struct sock             sk;
167         struct tpacket_stats    stats;
168 #ifdef CONFIG_PACKET_MMAP
169         char *                  *pg_vec;
170         unsigned int            head;
171         unsigned int            frames_per_block;
172         unsigned int            frame_size;
173         unsigned int            frame_max;
174         int                     copy_thresh;
175 #endif
176         struct packet_type      prot_hook;
177         spinlock_t              bind_lock;
178         unsigned int            running:1,      /* prot_hook is attached*/
179                                 auxdata:1,
180                                 origdev:1;
181         int                     ifindex;        /* bound device         */
182         __be16                  num;
183         struct packet_mclist    *mclist;
184 #ifdef CONFIG_PACKET_MMAP
185         atomic_t                mapped;
186         unsigned int            pg_vec_order;
187         unsigned int            pg_vec_pages;
188         unsigned int            pg_vec_len;
189         enum tpacket_versions   tp_version;
190         unsigned int            tp_hdrlen;
191         unsigned int            tp_reserve;
192 #endif
193 };
194
195 struct packet_skb_cb {
196         unsigned int origlen;
197         union {
198                 struct sockaddr_pkt pkt;
199                 struct sockaddr_ll ll;
200         } sa;
201 };
202
203 #define PACKET_SKB_CB(__skb)    ((struct packet_skb_cb *)((__skb)->cb))
204
205 #ifdef CONFIG_PACKET_MMAP
206
207 static void *packet_lookup_frame(struct packet_sock *po, unsigned int position,
208                                  int status)
209 {
210         unsigned int pg_vec_pos, frame_offset;
211         union {
212                 struct tpacket_hdr *h1;
213                 struct tpacket2_hdr *h2;
214                 void *raw;
215         } h;
216
217         pg_vec_pos = position / po->frames_per_block;
218         frame_offset = position % po->frames_per_block;
219
220         h.raw = po->pg_vec[pg_vec_pos] + (frame_offset * po->frame_size);
221         switch (po->tp_version) {
222         case TPACKET_V1:
223                 if (status != h.h1->tp_status ? TP_STATUS_USER :
224                                                 TP_STATUS_KERNEL)
225                         return NULL;
226                 break;
227         case TPACKET_V2:
228                 if (status != h.h2->tp_status ? TP_STATUS_USER :
229                                                 TP_STATUS_KERNEL)
230                         return NULL;
231                 break;
232         }
233         return h.raw;
234 }
235
236 static void __packet_set_status(struct packet_sock *po, void *frame, int status)
237 {
238         union {
239                 struct tpacket_hdr *h1;
240                 struct tpacket2_hdr *h2;
241                 void *raw;
242         } h;
243
244         h.raw = frame;
245         switch (po->tp_version) {
246         case TPACKET_V1:
247                 h.h1->tp_status = status;
248                 break;
249         case TPACKET_V2:
250                 h.h2->tp_status = status;
251                 break;
252         }
253 }
254 #endif
255
256 static inline struct packet_sock *pkt_sk(struct sock *sk)
257 {
258         return (struct packet_sock *)sk;
259 }
260
261 static void packet_sock_destruct(struct sock *sk)
262 {
263         WARN_ON(atomic_read(&sk->sk_rmem_alloc));
264         WARN_ON(atomic_read(&sk->sk_wmem_alloc));
265
266         if (!sock_flag(sk, SOCK_DEAD)) {
267                 printk("Attempt to release alive packet socket: %p\n", sk);
268                 return;
269         }
270
271         sk_refcnt_debug_dec(sk);
272 }
273
274
275 static const struct proto_ops packet_ops;
276
277 static const struct proto_ops packet_ops_spkt;
278
279 static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev,  struct packet_type *pt, struct net_device *orig_dev)
280 {
281         struct sock *sk;
282         struct sockaddr_pkt *spkt;
283
284         /*
285          *      When we registered the protocol we saved the socket in the data
286          *      field for just this event.
287          */
288
289         sk = pt->af_packet_priv;
290
291         /*
292          *      Yank back the headers [hope the device set this
293          *      right or kerboom...]
294          *
295          *      Incoming packets have ll header pulled,
296          *      push it back.
297          *
298          *      For outgoing ones skb->data == skb_mac_header(skb)
299          *      so that this procedure is noop.
300          */
301
302         if (skb->pkt_type == PACKET_LOOPBACK)
303                 goto out;
304
305         if (dev_net(dev) != sock_net(sk))
306                 goto out;
307
308         if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
309                 goto oom;
310
311         /* drop any routing info */
312         dst_release(skb->dst);
313         skb->dst = NULL;
314
315         /* drop conntrack reference */
316         nf_reset(skb);
317
318         spkt = &PACKET_SKB_CB(skb)->sa.pkt;
319
320         skb_push(skb, skb->data - skb_mac_header(skb));
321
322         /*
323          *      The SOCK_PACKET socket receives _all_ frames.
324          */
325
326         spkt->spkt_family = dev->type;
327         strlcpy(spkt->spkt_device, dev->name, sizeof(spkt->spkt_device));
328         spkt->spkt_protocol = skb->protocol;
329
330         /*
331          *      Charge the memory to the socket. This is done specifically
332          *      to prevent sockets using all the memory up.
333          */
334
335         if (sock_queue_rcv_skb(sk,skb) == 0)
336                 return 0;
337
338 out:
339         kfree_skb(skb);
340 oom:
341         return 0;
342 }
343
344
345 /*
346  *      Output a raw packet to a device layer. This bypasses all the other
347  *      protocol layers and you must therefore supply it with a complete frame
348  */
349
350 static int packet_sendmsg_spkt(struct kiocb *iocb, struct socket *sock,
351                                struct msghdr *msg, size_t len)
352 {
353         struct sock *sk = sock->sk;
354         struct sockaddr_pkt *saddr=(struct sockaddr_pkt *)msg->msg_name;
355         struct sk_buff *skb;
356         struct net_device *dev;
357         __be16 proto=0;
358         int err;
359
360         /*
361          *      Get and verify the address.
362          */
363
364         if (saddr)
365         {
366                 if (msg->msg_namelen < sizeof(struct sockaddr))
367                         return(-EINVAL);
368                 if (msg->msg_namelen==sizeof(struct sockaddr_pkt))
369                         proto=saddr->spkt_protocol;
370         }
371         else
372                 return(-ENOTCONN);      /* SOCK_PACKET must be sent giving an address */
373
374         /*
375          *      Find the device first to size check it
376          */
377
378         saddr->spkt_device[13] = 0;
379         dev = dev_get_by_name(sock_net(sk), saddr->spkt_device);
380         err = -ENODEV;
381         if (dev == NULL)
382                 goto out_unlock;
383
384         err = -ENETDOWN;
385         if (!(dev->flags & IFF_UP))
386                 goto out_unlock;
387
388         /*
389          *      You may not queue a frame bigger than the mtu. This is the lowest level
390          *      raw protocol and you must do your own fragmentation at this level.
391          */
392
393         err = -EMSGSIZE;
394         if (len > dev->mtu + dev->hard_header_len)
395                 goto out_unlock;
396
397         err = -ENOBUFS;
398         skb = sock_wmalloc(sk, len + LL_RESERVED_SPACE(dev), 0, GFP_KERNEL);
399
400         /*
401          *      If the write buffer is full, then tough. At this level the user gets to
402          *      deal with the problem - do your own algorithmic backoffs. That's far
403          *      more flexible.
404          */
405
406         if (skb == NULL)
407                 goto out_unlock;
408
409         /*
410          *      Fill it in
411          */
412
413         /* FIXME: Save some space for broken drivers that write a
414          * hard header at transmission time by themselves. PPP is the
415          * notable one here. This should really be fixed at the driver level.
416          */
417         skb_reserve(skb, LL_RESERVED_SPACE(dev));
418         skb_reset_network_header(skb);
419
420         /* Try to align data part correctly */
421         if (dev->header_ops) {
422                 skb->data -= dev->hard_header_len;
423                 skb->tail -= dev->hard_header_len;
424                 if (len < dev->hard_header_len)
425                         skb_reset_network_header(skb);
426         }
427
428         /* Returns -EFAULT on error */
429         err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
430         skb->protocol = proto;
431         skb->dev = dev;
432         skb->priority = sk->sk_priority;
433         if (err)
434                 goto out_free;
435
436         /*
437          *      Now send it
438          */
439
440         dev_queue_xmit(skb);
441         dev_put(dev);
442         return(len);
443
444 out_free:
445         kfree_skb(skb);
446 out_unlock:
447         if (dev)
448                 dev_put(dev);
449         return err;
450 }
451
452 static inline unsigned int run_filter(struct sk_buff *skb, struct sock *sk,
453                                       unsigned int res)
454 {
455         struct sk_filter *filter;
456
457         rcu_read_lock_bh();
458         filter = rcu_dereference(sk->sk_filter);
459         if (filter != NULL)
460                 res = sk_run_filter(skb, filter->insns, filter->len);
461         rcu_read_unlock_bh();
462
463         return res;
464 }
465
466 /*
467    This function makes lazy skb cloning in hope that most of packets
468    are discarded by BPF.
469
470    Note tricky part: we DO mangle shared skb! skb->data, skb->len
471    and skb->cb are mangled. It works because (and until) packets
472    falling here are owned by current CPU. Output packets are cloned
473    by dev_queue_xmit_nit(), input packets are processed by net_bh
474    sequencially, so that if we return skb to original state on exit,
475    we will not harm anyone.
476  */
477
478 static int packet_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
479 {
480         struct sock *sk;
481         struct sockaddr_ll *sll;
482         struct packet_sock *po;
483         u8 * skb_head = skb->data;
484         int skb_len = skb->len;
485         unsigned int snaplen, res;
486
487         if (skb->pkt_type == PACKET_LOOPBACK)
488                 goto drop;
489
490         sk = pt->af_packet_priv;
491         po = pkt_sk(sk);
492
493         if (dev_net(dev) != sock_net(sk))
494                 goto drop;
495
496         skb->dev = dev;
497
498         if (dev->header_ops) {
499                 /* The device has an explicit notion of ll header,
500                    exported to higher levels.
501
502                    Otherwise, the device hides datails of it frame
503                    structure, so that corresponding packet head
504                    never delivered to user.
505                  */
506                 if (sk->sk_type != SOCK_DGRAM)
507                         skb_push(skb, skb->data - skb_mac_header(skb));
508                 else if (skb->pkt_type == PACKET_OUTGOING) {
509                         /* Special case: outgoing packets have ll header at head */
510                         skb_pull(skb, skb_network_offset(skb));
511                 }
512         }
513
514         snaplen = skb->len;
515
516         res = run_filter(skb, sk, snaplen);
517         if (!res)
518                 goto drop_n_restore;
519         if (snaplen > res)
520                 snaplen = res;
521
522         if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
523             (unsigned)sk->sk_rcvbuf)
524                 goto drop_n_acct;
525
526         if (skb_shared(skb)) {
527                 struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
528                 if (nskb == NULL)
529                         goto drop_n_acct;
530
531                 if (skb_head != skb->data) {
532                         skb->data = skb_head;
533                         skb->len = skb_len;
534                 }
535                 kfree_skb(skb);
536                 skb = nskb;
537         }
538
539         BUILD_BUG_ON(sizeof(*PACKET_SKB_CB(skb)) + MAX_ADDR_LEN - 8 >
540                      sizeof(skb->cb));
541
542         sll = &PACKET_SKB_CB(skb)->sa.ll;
543         sll->sll_family = AF_PACKET;
544         sll->sll_hatype = dev->type;
545         sll->sll_protocol = skb->protocol;
546         sll->sll_pkttype = skb->pkt_type;
547         if (unlikely(po->origdev))
548                 sll->sll_ifindex = orig_dev->ifindex;
549         else
550                 sll->sll_ifindex = dev->ifindex;
551
552         sll->sll_halen = dev_parse_header(skb, sll->sll_addr);
553
554         PACKET_SKB_CB(skb)->origlen = skb->len;
555
556         if (pskb_trim(skb, snaplen))
557                 goto drop_n_acct;
558
559         skb_set_owner_r(skb, sk);
560         skb->dev = NULL;
561         dst_release(skb->dst);
562         skb->dst = NULL;
563
564         /* drop conntrack reference */
565         nf_reset(skb);
566
567         spin_lock(&sk->sk_receive_queue.lock);
568         po->stats.tp_packets++;
569         __skb_queue_tail(&sk->sk_receive_queue, skb);
570         spin_unlock(&sk->sk_receive_queue.lock);
571         sk->sk_data_ready(sk, skb->len);
572         return 0;
573
574 drop_n_acct:
575         spin_lock(&sk->sk_receive_queue.lock);
576         po->stats.tp_drops++;
577         spin_unlock(&sk->sk_receive_queue.lock);
578
579 drop_n_restore:
580         if (skb_head != skb->data && skb_shared(skb)) {
581                 skb->data = skb_head;
582                 skb->len = skb_len;
583         }
584 drop:
585         kfree_skb(skb);
586         return 0;
587 }
588
589 #ifdef CONFIG_PACKET_MMAP
590 static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
591 {
592         struct sock *sk;
593         struct packet_sock *po;
594         struct sockaddr_ll *sll;
595         union {
596                 struct tpacket_hdr *h1;
597                 struct tpacket2_hdr *h2;
598                 void *raw;
599         } h;
600         u8 * skb_head = skb->data;
601         int skb_len = skb->len;
602         unsigned int snaplen, res;
603         unsigned long status = TP_STATUS_LOSING|TP_STATUS_USER;
604         unsigned short macoff, netoff, hdrlen;
605         struct sk_buff *copy_skb = NULL;
606         struct timeval tv;
607         struct timespec ts;
608
609         if (skb->pkt_type == PACKET_LOOPBACK)
610                 goto drop;
611
612         sk = pt->af_packet_priv;
613         po = pkt_sk(sk);
614
615         if (dev_net(dev) != sock_net(sk))
616                 goto drop;
617
618         if (dev->header_ops) {
619                 if (sk->sk_type != SOCK_DGRAM)
620                         skb_push(skb, skb->data - skb_mac_header(skb));
621                 else if (skb->pkt_type == PACKET_OUTGOING) {
622                         /* Special case: outgoing packets have ll header at head */
623                         skb_pull(skb, skb_network_offset(skb));
624                 }
625         }
626
627         if (skb->ip_summed == CHECKSUM_PARTIAL)
628                 status |= TP_STATUS_CSUMNOTREADY;
629
630         snaplen = skb->len;
631
632         res = run_filter(skb, sk, snaplen);
633         if (!res)
634                 goto drop_n_restore;
635         if (snaplen > res)
636                 snaplen = res;
637
638         if (sk->sk_type == SOCK_DGRAM) {
639                 macoff = netoff = TPACKET_ALIGN(po->tp_hdrlen) + 16 +
640                                   po->tp_reserve;
641         } else {
642                 unsigned maclen = skb_network_offset(skb);
643                 netoff = TPACKET_ALIGN(po->tp_hdrlen +
644                                        (maclen < 16 ? 16 : maclen)) +
645                         po->tp_reserve;
646                 macoff = netoff - maclen;
647         }
648
649         if (macoff + snaplen > po->frame_size) {
650                 if (po->copy_thresh &&
651                     atomic_read(&sk->sk_rmem_alloc) + skb->truesize <
652                     (unsigned)sk->sk_rcvbuf) {
653                         if (skb_shared(skb)) {
654                                 copy_skb = skb_clone(skb, GFP_ATOMIC);
655                         } else {
656                                 copy_skb = skb_get(skb);
657                                 skb_head = skb->data;
658                         }
659                         if (copy_skb)
660                                 skb_set_owner_r(copy_skb, sk);
661                 }
662                 snaplen = po->frame_size - macoff;
663                 if ((int)snaplen < 0)
664                         snaplen = 0;
665         }
666
667         spin_lock(&sk->sk_receive_queue.lock);
668         h.raw = packet_lookup_frame(po, po->head, TP_STATUS_KERNEL);
669         if (!h.raw)
670                 goto ring_is_full;
671         po->head = po->head != po->frame_max ? po->head+1 : 0;
672         po->stats.tp_packets++;
673         if (copy_skb) {
674                 status |= TP_STATUS_COPY;
675                 __skb_queue_tail(&sk->sk_receive_queue, copy_skb);
676         }
677         if (!po->stats.tp_drops)
678                 status &= ~TP_STATUS_LOSING;
679         spin_unlock(&sk->sk_receive_queue.lock);
680
681         skb_copy_bits(skb, 0, h.raw + macoff, snaplen);
682
683         switch (po->tp_version) {
684         case TPACKET_V1:
685                 h.h1->tp_len = skb->len;
686                 h.h1->tp_snaplen = snaplen;
687                 h.h1->tp_mac = macoff;
688                 h.h1->tp_net = netoff;
689                 if (skb->tstamp.tv64)
690                         tv = ktime_to_timeval(skb->tstamp);
691                 else
692                         do_gettimeofday(&tv);
693                 h.h1->tp_sec = tv.tv_sec;
694                 h.h1->tp_usec = tv.tv_usec;
695                 hdrlen = sizeof(*h.h1);
696                 break;
697         case TPACKET_V2:
698                 h.h2->tp_len = skb->len;
699                 h.h2->tp_snaplen = snaplen;
700                 h.h2->tp_mac = macoff;
701                 h.h2->tp_net = netoff;
702                 if (skb->tstamp.tv64)
703                         ts = ktime_to_timespec(skb->tstamp);
704                 else
705                         getnstimeofday(&ts);
706                 h.h2->tp_sec = ts.tv_sec;
707                 h.h2->tp_nsec = ts.tv_nsec;
708                 h.h2->tp_vlan_tci = skb->vlan_tci;
709                 hdrlen = sizeof(*h.h2);
710                 break;
711         default:
712                 BUG();
713         }
714
715         sll = h.raw + TPACKET_ALIGN(hdrlen);
716         sll->sll_halen = dev_parse_header(skb, sll->sll_addr);
717         sll->sll_family = AF_PACKET;
718         sll->sll_hatype = dev->type;
719         sll->sll_protocol = skb->protocol;
720         sll->sll_pkttype = skb->pkt_type;
721         if (unlikely(po->origdev))
722                 sll->sll_ifindex = orig_dev->ifindex;
723         else
724                 sll->sll_ifindex = dev->ifindex;
725
726         __packet_set_status(po, h.raw, status);
727         smp_mb();
728
729         {
730                 struct page *p_start, *p_end;
731                 u8 *h_end = h.raw + macoff + snaplen - 1;
732
733                 p_start = virt_to_page(h.raw);
734                 p_end = virt_to_page(h_end);
735                 while (p_start <= p_end) {
736                         flush_dcache_page(p_start);
737                         p_start++;
738                 }
739         }
740
741         sk->sk_data_ready(sk, 0);
742
743 drop_n_restore:
744         if (skb_head != skb->data && skb_shared(skb)) {
745                 skb->data = skb_head;
746                 skb->len = skb_len;
747         }
748 drop:
749         kfree_skb(skb);
750         return 0;
751
752 ring_is_full:
753         po->stats.tp_drops++;
754         spin_unlock(&sk->sk_receive_queue.lock);
755
756         sk->sk_data_ready(sk, 0);
757         if (copy_skb)
758                 kfree_skb(copy_skb);
759         goto drop_n_restore;
760 }
761
762 #endif
763
764
765 static int packet_sendmsg(struct kiocb *iocb, struct socket *sock,
766                           struct msghdr *msg, size_t len)
767 {
768         struct sock *sk = sock->sk;
769         struct sockaddr_ll *saddr=(struct sockaddr_ll *)msg->msg_name;
770         struct sk_buff *skb;
771         struct net_device *dev;
772         __be16 proto;
773         unsigned char *addr;
774         int ifindex, err, reserve = 0;
775
776         /*
777          *      Get and verify the address.
778          */
779
780         if (saddr == NULL) {
781                 struct packet_sock *po = pkt_sk(sk);
782
783                 ifindex = po->ifindex;
784                 proto   = po->num;
785                 addr    = NULL;
786         } else {
787                 err = -EINVAL;
788                 if (msg->msg_namelen < sizeof(struct sockaddr_ll))
789                         goto out;
790                 if (msg->msg_namelen < (saddr->sll_halen + offsetof(struct sockaddr_ll, sll_addr)))
791                         goto out;
792                 ifindex = saddr->sll_ifindex;
793                 proto   = saddr->sll_protocol;
794                 addr    = saddr->sll_addr;
795         }
796
797
798         dev = dev_get_by_index(sock_net(sk), ifindex);
799         err = -ENXIO;
800         if (dev == NULL)
801                 goto out_unlock;
802         if (sock->type == SOCK_RAW)
803                 reserve = dev->hard_header_len;
804
805         err = -ENETDOWN;
806         if (!(dev->flags & IFF_UP))
807                 goto out_unlock;
808
809         err = -EMSGSIZE;
810         if (len > dev->mtu+reserve)
811                 goto out_unlock;
812
813         skb = sock_alloc_send_skb(sk, len + LL_ALLOCATED_SPACE(dev),
814                                 msg->msg_flags & MSG_DONTWAIT, &err);
815         if (skb==NULL)
816                 goto out_unlock;
817
818         skb_reserve(skb, LL_RESERVED_SPACE(dev));
819         skb_reset_network_header(skb);
820
821         err = -EINVAL;
822         if (sock->type == SOCK_DGRAM &&
823             dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len) < 0)
824                 goto out_free;
825
826         /* Returns -EFAULT on error */
827         err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
828         if (err)
829                 goto out_free;
830
831         skb->protocol = proto;
832         skb->dev = dev;
833         skb->priority = sk->sk_priority;
834
835         /*
836          *      Now send it
837          */
838
839         err = dev_queue_xmit(skb);
840         if (err > 0 && (err = net_xmit_errno(err)) != 0)
841                 goto out_unlock;
842
843         dev_put(dev);
844
845         return(len);
846
847 out_free:
848         kfree_skb(skb);
849 out_unlock:
850         if (dev)
851                 dev_put(dev);
852 out:
853         return err;
854 }
855
856 /*
857  *      Close a PACKET socket. This is fairly simple. We immediately go
858  *      to 'closed' state and remove our protocol entry in the device list.
859  */
860
861 static int packet_release(struct socket *sock)
862 {
863         struct sock *sk = sock->sk;
864         struct packet_sock *po;
865         struct net *net;
866
867         if (!sk)
868                 return 0;
869
870         net = sock_net(sk);
871         po = pkt_sk(sk);
872
873         write_lock_bh(&net->packet.sklist_lock);
874         sk_del_node_init(sk);
875         write_unlock_bh(&net->packet.sklist_lock);
876
877         /*
878          *      Unhook packet receive handler.
879          */
880
881         if (po->running) {
882                 /*
883                  *      Remove the protocol hook
884                  */
885                 dev_remove_pack(&po->prot_hook);
886                 po->running = 0;
887                 po->num = 0;
888                 __sock_put(sk);
889         }
890
891         packet_flush_mclist(sk);
892
893 #ifdef CONFIG_PACKET_MMAP
894         if (po->pg_vec) {
895                 struct tpacket_req req;
896                 memset(&req, 0, sizeof(req));
897                 packet_set_ring(sk, &req, 1);
898         }
899 #endif
900
901         /*
902          *      Now the socket is dead. No more input will appear.
903          */
904
905         sock_orphan(sk);
906         sock->sk = NULL;
907
908         /* Purge queues */
909
910         skb_queue_purge(&sk->sk_receive_queue);
911         sk_refcnt_debug_release(sk);
912
913         sock_put(sk);
914         return 0;
915 }
916
917 /*
918  *      Attach a packet hook.
919  */
920
921 static int packet_do_bind(struct sock *sk, struct net_device *dev, __be16 protocol)
922 {
923         struct packet_sock *po = pkt_sk(sk);
924         /*
925          *      Detach an existing hook if present.
926          */
927
928         lock_sock(sk);
929
930         spin_lock(&po->bind_lock);
931         if (po->running) {
932                 __sock_put(sk);
933                 po->running = 0;
934                 po->num = 0;
935                 spin_unlock(&po->bind_lock);
936                 dev_remove_pack(&po->prot_hook);
937                 spin_lock(&po->bind_lock);
938         }
939
940         po->num = protocol;
941         po->prot_hook.type = protocol;
942         po->prot_hook.dev = dev;
943
944         po->ifindex = dev ? dev->ifindex : 0;
945
946         if (protocol == 0)
947                 goto out_unlock;
948
949         if (!dev || (dev->flags & IFF_UP)) {
950                 dev_add_pack(&po->prot_hook);
951                 sock_hold(sk);
952                 po->running = 1;
953         } else {
954                 sk->sk_err = ENETDOWN;
955                 if (!sock_flag(sk, SOCK_DEAD))
956                         sk->sk_error_report(sk);
957         }
958
959 out_unlock:
960         spin_unlock(&po->bind_lock);
961         release_sock(sk);
962         return 0;
963 }
964
965 /*
966  *      Bind a packet socket to a device
967  */
968
969 static int packet_bind_spkt(struct socket *sock, struct sockaddr *uaddr, int addr_len)
970 {
971         struct sock *sk=sock->sk;
972         char name[15];
973         struct net_device *dev;
974         int err = -ENODEV;
975
976         /*
977          *      Check legality
978          */
979
980         if (addr_len != sizeof(struct sockaddr))
981                 return -EINVAL;
982         strlcpy(name,uaddr->sa_data,sizeof(name));
983
984         dev = dev_get_by_name(sock_net(sk), name);
985         if (dev) {
986                 err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
987                 dev_put(dev);
988         }
989         return err;
990 }
991
992 static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
993 {
994         struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;
995         struct sock *sk=sock->sk;
996         struct net_device *dev = NULL;
997         int err;
998
999
1000         /*
1001          *      Check legality
1002          */
1003
1004         if (addr_len < sizeof(struct sockaddr_ll))
1005                 return -EINVAL;
1006         if (sll->sll_family != AF_PACKET)
1007                 return -EINVAL;
1008
1009         if (sll->sll_ifindex) {
1010                 err = -ENODEV;
1011                 dev = dev_get_by_index(sock_net(sk), sll->sll_ifindex);
1012                 if (dev == NULL)
1013                         goto out;
1014         }
1015         err = packet_do_bind(sk, dev, sll->sll_protocol ? : pkt_sk(sk)->num);
1016         if (dev)
1017                 dev_put(dev);
1018
1019 out:
1020         return err;
1021 }
1022
1023 static struct proto packet_proto = {
1024         .name     = "PACKET",
1025         .owner    = THIS_MODULE,
1026         .obj_size = sizeof(struct packet_sock),
1027 };
1028
1029 /*
1030  *      Create a packet of type SOCK_PACKET.
1031  */
1032
1033 static int packet_create(struct net *net, struct socket *sock, int protocol)
1034 {
1035         struct sock *sk;
1036         struct packet_sock *po;
1037         __be16 proto = (__force __be16)protocol; /* weird, but documented */
1038         int err;
1039
1040         if (!capable(CAP_NET_RAW))
1041                 return -EPERM;
1042         if (sock->type != SOCK_DGRAM && sock->type != SOCK_RAW &&
1043             sock->type != SOCK_PACKET)
1044                 return -ESOCKTNOSUPPORT;
1045
1046         sock->state = SS_UNCONNECTED;
1047
1048         err = -ENOBUFS;
1049         sk = sk_alloc(net, PF_PACKET, GFP_KERNEL, &packet_proto);
1050         if (sk == NULL)
1051                 goto out;
1052
1053         sock->ops = &packet_ops;
1054         if (sock->type == SOCK_PACKET)
1055                 sock->ops = &packet_ops_spkt;
1056
1057         sock_init_data(sock, sk);
1058
1059         po = pkt_sk(sk);
1060         sk->sk_family = PF_PACKET;
1061         po->num = proto;
1062
1063         sk->sk_destruct = packet_sock_destruct;
1064         sk_refcnt_debug_inc(sk);
1065
1066         /*
1067          *      Attach a protocol block
1068          */
1069
1070         spin_lock_init(&po->bind_lock);
1071         po->prot_hook.func = packet_rcv;
1072
1073         if (sock->type == SOCK_PACKET)
1074                 po->prot_hook.func = packet_rcv_spkt;
1075
1076         po->prot_hook.af_packet_priv = sk;
1077
1078         if (proto) {
1079                 po->prot_hook.type = proto;
1080                 dev_add_pack(&po->prot_hook);
1081                 sock_hold(sk);
1082                 po->running = 1;
1083         }
1084
1085         write_lock_bh(&net->packet.sklist_lock);
1086         sk_add_node(sk, &net->packet.sklist);
1087         write_unlock_bh(&net->packet.sklist_lock);
1088         return(0);
1089 out:
1090         return err;
1091 }
1092
1093 /*
1094  *      Pull a packet from our receive queue and hand it to the user.
1095  *      If necessary we block.
1096  */
1097
1098 static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
1099                           struct msghdr *msg, size_t len, int flags)
1100 {
1101         struct sock *sk = sock->sk;
1102         struct sk_buff *skb;
1103         int copied, err;
1104         struct sockaddr_ll *sll;
1105
1106         err = -EINVAL;
1107         if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
1108                 goto out;
1109
1110 #if 0
1111         /* What error should we return now? EUNATTACH? */
1112         if (pkt_sk(sk)->ifindex < 0)
1113                 return -ENODEV;
1114 #endif
1115
1116         /*
1117          *      Call the generic datagram receiver. This handles all sorts
1118          *      of horrible races and re-entrancy so we can forget about it
1119          *      in the protocol layers.
1120          *
1121          *      Now it will return ENETDOWN, if device have just gone down,
1122          *      but then it will block.
1123          */
1124
1125         skb=skb_recv_datagram(sk,flags,flags&MSG_DONTWAIT,&err);
1126
1127         /*
1128          *      An error occurred so return it. Because skb_recv_datagram()
1129          *      handles the blocking we don't see and worry about blocking
1130          *      retries.
1131          */
1132
1133         if (skb == NULL)
1134                 goto out;
1135
1136         /*
1137          *      If the address length field is there to be filled in, we fill
1138          *      it in now.
1139          */
1140
1141         sll = &PACKET_SKB_CB(skb)->sa.ll;
1142         if (sock->type == SOCK_PACKET)
1143                 msg->msg_namelen = sizeof(struct sockaddr_pkt);
1144         else
1145                 msg->msg_namelen = sll->sll_halen + offsetof(struct sockaddr_ll, sll_addr);
1146
1147         /*
1148          *      You lose any data beyond the buffer you gave. If it worries a
1149          *      user program they can ask the device for its MTU anyway.
1150          */
1151
1152         copied = skb->len;
1153         if (copied > len)
1154         {
1155                 copied=len;
1156                 msg->msg_flags|=MSG_TRUNC;
1157         }
1158
1159         err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1160         if (err)
1161                 goto out_free;
1162
1163         sock_recv_timestamp(msg, sk, skb);
1164
1165         if (msg->msg_name)
1166                 memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa,
1167                        msg->msg_namelen);
1168
1169         if (pkt_sk(sk)->auxdata) {
1170                 struct tpacket_auxdata aux;
1171
1172                 aux.tp_status = TP_STATUS_USER;
1173                 if (skb->ip_summed == CHECKSUM_PARTIAL)
1174                         aux.tp_status |= TP_STATUS_CSUMNOTREADY;
1175                 aux.tp_len = PACKET_SKB_CB(skb)->origlen;
1176                 aux.tp_snaplen = skb->len;
1177                 aux.tp_mac = 0;
1178                 aux.tp_net = skb_network_offset(skb);
1179                 aux.tp_vlan_tci = skb->vlan_tci;
1180
1181                 put_cmsg(msg, SOL_PACKET, PACKET_AUXDATA, sizeof(aux), &aux);
1182         }
1183
1184         /*
1185          *      Free or return the buffer as appropriate. Again this
1186          *      hides all the races and re-entrancy issues from us.
1187          */
1188         err = (flags&MSG_TRUNC) ? skb->len : copied;
1189
1190 out_free:
1191         skb_free_datagram(sk, skb);
1192 out:
1193         return err;
1194 }
1195
1196 static int packet_getname_spkt(struct socket *sock, struct sockaddr *uaddr,
1197                                int *uaddr_len, int peer)
1198 {
1199         struct net_device *dev;
1200         struct sock *sk = sock->sk;
1201
1202         if (peer)
1203                 return -EOPNOTSUPP;
1204
1205         uaddr->sa_family = AF_PACKET;
1206         dev = dev_get_by_index(sock_net(sk), pkt_sk(sk)->ifindex);
1207         if (dev) {
1208                 strlcpy(uaddr->sa_data, dev->name, 15);
1209                 dev_put(dev);
1210         } else
1211                 memset(uaddr->sa_data, 0, 14);
1212         *uaddr_len = sizeof(*uaddr);
1213
1214         return 0;
1215 }
1216
1217 static int packet_getname(struct socket *sock, struct sockaddr *uaddr,
1218                           int *uaddr_len, int peer)
1219 {
1220         struct net_device *dev;
1221         struct sock *sk = sock->sk;
1222         struct packet_sock *po = pkt_sk(sk);
1223         struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;
1224
1225         if (peer)
1226                 return -EOPNOTSUPP;
1227
1228         sll->sll_family = AF_PACKET;
1229         sll->sll_ifindex = po->ifindex;
1230         sll->sll_protocol = po->num;
1231         dev = dev_get_by_index(sock_net(sk), po->ifindex);
1232         if (dev) {
1233                 sll->sll_hatype = dev->type;
1234                 sll->sll_halen = dev->addr_len;
1235                 memcpy(sll->sll_addr, dev->dev_addr, dev->addr_len);
1236                 dev_put(dev);
1237         } else {
1238                 sll->sll_hatype = 0;    /* Bad: we have no ARPHRD_UNSPEC */
1239                 sll->sll_halen = 0;
1240         }
1241         *uaddr_len = offsetof(struct sockaddr_ll, sll_addr) + sll->sll_halen;
1242
1243         return 0;
1244 }
1245
1246 static int packet_dev_mc(struct net_device *dev, struct packet_mclist *i,
1247                          int what)
1248 {
1249         switch (i->type) {
1250         case PACKET_MR_MULTICAST:
1251                 if (what > 0)
1252                         dev_mc_add(dev, i->addr, i->alen, 0);
1253                 else
1254                         dev_mc_delete(dev, i->addr, i->alen, 0);
1255                 break;
1256         case PACKET_MR_PROMISC:
1257                 return dev_set_promiscuity(dev, what);
1258                 break;
1259         case PACKET_MR_ALLMULTI:
1260                 return dev_set_allmulti(dev, what);
1261                 break;
1262         default:;
1263         }
1264         return 0;
1265 }
1266
1267 static void packet_dev_mclist(struct net_device *dev, struct packet_mclist *i, int what)
1268 {
1269         for ( ; i; i=i->next) {
1270                 if (i->ifindex == dev->ifindex)
1271                         packet_dev_mc(dev, i, what);
1272         }
1273 }
1274
1275 static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
1276 {
1277         struct packet_sock *po = pkt_sk(sk);
1278         struct packet_mclist *ml, *i;
1279         struct net_device *dev;
1280         int err;
1281
1282         rtnl_lock();
1283
1284         err = -ENODEV;
1285         dev = __dev_get_by_index(sock_net(sk), mreq->mr_ifindex);
1286         if (!dev)
1287                 goto done;
1288
1289         err = -EINVAL;
1290         if (mreq->mr_alen > dev->addr_len)
1291                 goto done;
1292
1293         err = -ENOBUFS;
1294         i = kmalloc(sizeof(*i), GFP_KERNEL);
1295         if (i == NULL)
1296                 goto done;
1297
1298         err = 0;
1299         for (ml = po->mclist; ml; ml = ml->next) {
1300                 if (ml->ifindex == mreq->mr_ifindex &&
1301                     ml->type == mreq->mr_type &&
1302                     ml->alen == mreq->mr_alen &&
1303                     memcmp(ml->addr, mreq->mr_address, ml->alen) == 0) {
1304                         ml->count++;
1305                         /* Free the new element ... */
1306                         kfree(i);
1307                         goto done;
1308                 }
1309         }
1310
1311         i->type = mreq->mr_type;
1312         i->ifindex = mreq->mr_ifindex;
1313         i->alen = mreq->mr_alen;
1314         memcpy(i->addr, mreq->mr_address, i->alen);
1315         i->count = 1;
1316         i->next = po->mclist;
1317         po->mclist = i;
1318         err = packet_dev_mc(dev, i, 1);
1319         if (err) {
1320                 po->mclist = i->next;
1321                 kfree(i);
1322         }
1323
1324 done:
1325         rtnl_unlock();
1326         return err;
1327 }
1328
1329 static int packet_mc_drop(struct sock *sk, struct packet_mreq_max *mreq)
1330 {
1331         struct packet_mclist *ml, **mlp;
1332
1333         rtnl_lock();
1334
1335         for (mlp = &pkt_sk(sk)->mclist; (ml = *mlp) != NULL; mlp = &ml->next) {
1336                 if (ml->ifindex == mreq->mr_ifindex &&
1337                     ml->type == mreq->mr_type &&
1338                     ml->alen == mreq->mr_alen &&
1339                     memcmp(ml->addr, mreq->mr_address, ml->alen) == 0) {
1340                         if (--ml->count == 0) {
1341                                 struct net_device *dev;
1342                                 *mlp = ml->next;
1343                                 dev = dev_get_by_index(sock_net(sk), ml->ifindex);
1344                                 if (dev) {
1345                                         packet_dev_mc(dev, ml, -1);
1346                                         dev_put(dev);
1347                                 }
1348                                 kfree(ml);
1349                         }
1350                         rtnl_unlock();
1351                         return 0;
1352                 }
1353         }
1354         rtnl_unlock();
1355         return -EADDRNOTAVAIL;
1356 }
1357
1358 static void packet_flush_mclist(struct sock *sk)
1359 {
1360         struct packet_sock *po = pkt_sk(sk);
1361         struct packet_mclist *ml;
1362
1363         if (!po->mclist)
1364                 return;
1365
1366         rtnl_lock();
1367         while ((ml = po->mclist) != NULL) {
1368                 struct net_device *dev;
1369
1370                 po->mclist = ml->next;
1371                 if ((dev = dev_get_by_index(sock_net(sk), ml->ifindex)) != NULL) {
1372                         packet_dev_mc(dev, ml, -1);
1373                         dev_put(dev);
1374                 }
1375                 kfree(ml);
1376         }
1377         rtnl_unlock();
1378 }
1379
1380 static int
1381 packet_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
1382 {
1383         struct sock *sk = sock->sk;
1384         struct packet_sock *po = pkt_sk(sk);
1385         int ret;
1386
1387         if (level != SOL_PACKET)
1388                 return -ENOPROTOOPT;
1389
1390         switch(optname) {
1391         case PACKET_ADD_MEMBERSHIP:
1392         case PACKET_DROP_MEMBERSHIP:
1393         {
1394                 struct packet_mreq_max mreq;
1395                 int len = optlen;
1396                 memset(&mreq, 0, sizeof(mreq));
1397                 if (len < sizeof(struct packet_mreq))
1398                         return -EINVAL;
1399                 if (len > sizeof(mreq))
1400                         len = sizeof(mreq);
1401                 if (copy_from_user(&mreq,optval,len))
1402                         return -EFAULT;
1403                 if (len < (mreq.mr_alen + offsetof(struct packet_mreq, mr_address)))
1404                         return -EINVAL;
1405                 if (optname == PACKET_ADD_MEMBERSHIP)
1406                         ret = packet_mc_add(sk, &mreq);
1407                 else
1408                         ret = packet_mc_drop(sk, &mreq);
1409                 return ret;
1410         }
1411
1412 #ifdef CONFIG_PACKET_MMAP
1413         case PACKET_RX_RING:
1414         {
1415                 struct tpacket_req req;
1416
1417                 if (optlen<sizeof(req))
1418                         return -EINVAL;
1419                 if (copy_from_user(&req,optval,sizeof(req)))
1420                         return -EFAULT;
1421                 return packet_set_ring(sk, &req, 0);
1422         }
1423         case PACKET_COPY_THRESH:
1424         {
1425                 int val;
1426
1427                 if (optlen!=sizeof(val))
1428                         return -EINVAL;
1429                 if (copy_from_user(&val,optval,sizeof(val)))
1430                         return -EFAULT;
1431
1432                 pkt_sk(sk)->copy_thresh = val;
1433                 return 0;
1434         }
1435         case PACKET_VERSION:
1436         {
1437                 int val;
1438
1439                 if (optlen != sizeof(val))
1440                         return -EINVAL;
1441                 if (po->pg_vec)
1442                         return -EBUSY;
1443                 if (copy_from_user(&val, optval, sizeof(val)))
1444                         return -EFAULT;
1445                 switch (val) {
1446                 case TPACKET_V1:
1447                 case TPACKET_V2:
1448                         po->tp_version = val;
1449                         return 0;
1450                 default:
1451                         return -EINVAL;
1452                 }
1453         }
1454         case PACKET_RESERVE:
1455         {
1456                 unsigned int val;
1457
1458                 if (optlen != sizeof(val))
1459                         return -EINVAL;
1460                 if (po->pg_vec)
1461                         return -EBUSY;
1462                 if (copy_from_user(&val, optval, sizeof(val)))
1463                         return -EFAULT;
1464                 po->tp_reserve = val;
1465                 return 0;
1466         }
1467 #endif
1468         case PACKET_AUXDATA:
1469         {
1470                 int val;
1471
1472                 if (optlen < sizeof(val))
1473                         return -EINVAL;
1474                 if (copy_from_user(&val, optval, sizeof(val)))
1475                         return -EFAULT;
1476
1477                 po->auxdata = !!val;
1478                 return 0;
1479         }
1480         case PACKET_ORIGDEV:
1481         {
1482                 int val;
1483
1484                 if (optlen < sizeof(val))
1485                         return -EINVAL;
1486                 if (copy_from_user(&val, optval, sizeof(val)))
1487                         return -EFAULT;
1488
1489                 po->origdev = !!val;
1490                 return 0;
1491         }
1492         default:
1493                 return -ENOPROTOOPT;
1494         }
1495 }
1496
1497 static int packet_getsockopt(struct socket *sock, int level, int optname,
1498                              char __user *optval, int __user *optlen)
1499 {
1500         int len;
1501         int val;
1502         struct sock *sk = sock->sk;
1503         struct packet_sock *po = pkt_sk(sk);
1504         void *data;
1505         struct tpacket_stats st;
1506
1507         if (level != SOL_PACKET)
1508                 return -ENOPROTOOPT;
1509
1510         if (get_user(len, optlen))
1511                 return -EFAULT;
1512
1513         if (len < 0)
1514                 return -EINVAL;
1515
1516         switch(optname) {
1517         case PACKET_STATISTICS:
1518                 if (len > sizeof(struct tpacket_stats))
1519                         len = sizeof(struct tpacket_stats);
1520                 spin_lock_bh(&sk->sk_receive_queue.lock);
1521                 st = po->stats;
1522                 memset(&po->stats, 0, sizeof(st));
1523                 spin_unlock_bh(&sk->sk_receive_queue.lock);
1524                 st.tp_packets += st.tp_drops;
1525
1526                 data = &st;
1527                 break;
1528         case PACKET_AUXDATA:
1529                 if (len > sizeof(int))
1530                         len = sizeof(int);
1531                 val = po->auxdata;
1532
1533                 data = &val;
1534                 break;
1535         case PACKET_ORIGDEV:
1536                 if (len > sizeof(int))
1537                         len = sizeof(int);
1538                 val = po->origdev;
1539
1540                 data = &val;
1541                 break;
1542 #ifdef CONFIG_PACKET_MMAP
1543         case PACKET_VERSION:
1544                 if (len > sizeof(int))
1545                         len = sizeof(int);
1546                 val = po->tp_version;
1547                 data = &val;
1548                 break;
1549         case PACKET_HDRLEN:
1550                 if (len > sizeof(int))
1551                         len = sizeof(int);
1552                 if (copy_from_user(&val, optval, len))
1553                         return -EFAULT;
1554                 switch (val) {
1555                 case TPACKET_V1:
1556                         val = sizeof(struct tpacket_hdr);
1557                         break;
1558                 case TPACKET_V2:
1559                         val = sizeof(struct tpacket2_hdr);
1560                         break;
1561                 default:
1562                         return -EINVAL;
1563                 }
1564                 data = &val;
1565                 break;
1566         case PACKET_RESERVE:
1567                 if (len > sizeof(unsigned int))
1568                         len = sizeof(unsigned int);
1569                 val = po->tp_reserve;
1570                 data = &val;
1571                 break;
1572 #endif
1573         default:
1574                 return -ENOPROTOOPT;
1575         }
1576
1577         if (put_user(len, optlen))
1578                 return -EFAULT;
1579         if (copy_to_user(optval, data, len))
1580                 return -EFAULT;
1581         return 0;
1582 }
1583
1584
1585 static int packet_notifier(struct notifier_block *this, unsigned long msg, void *data)
1586 {
1587         struct sock *sk;
1588         struct hlist_node *node;
1589         struct net_device *dev = data;
1590         struct net *net = dev_net(dev);
1591
1592         read_lock(&net->packet.sklist_lock);
1593         sk_for_each(sk, node, &net->packet.sklist) {
1594                 struct packet_sock *po = pkt_sk(sk);
1595
1596                 switch (msg) {
1597                 case NETDEV_UNREGISTER:
1598                         if (po->mclist)
1599                                 packet_dev_mclist(dev, po->mclist, -1);
1600                         /* fallthrough */
1601
1602                 case NETDEV_DOWN:
1603                         if (dev->ifindex == po->ifindex) {
1604                                 spin_lock(&po->bind_lock);
1605                                 if (po->running) {
1606                                         __dev_remove_pack(&po->prot_hook);
1607                                         __sock_put(sk);
1608                                         po->running = 0;
1609                                         sk->sk_err = ENETDOWN;
1610                                         if (!sock_flag(sk, SOCK_DEAD))
1611                                                 sk->sk_error_report(sk);
1612                                 }
1613                                 if (msg == NETDEV_UNREGISTER) {
1614                                         po->ifindex = -1;
1615                                         po->prot_hook.dev = NULL;
1616                                 }
1617                                 spin_unlock(&po->bind_lock);
1618                         }
1619                         break;
1620                 case NETDEV_UP:
1621                         spin_lock(&po->bind_lock);
1622                         if (dev->ifindex == po->ifindex && po->num &&
1623                             !po->running) {
1624                                 dev_add_pack(&po->prot_hook);
1625                                 sock_hold(sk);
1626                                 po->running = 1;
1627                         }
1628                         spin_unlock(&po->bind_lock);
1629                         break;
1630                 }
1631         }
1632         read_unlock(&net->packet.sklist_lock);
1633         return NOTIFY_DONE;
1634 }
1635
1636
1637 static int packet_ioctl(struct socket *sock, unsigned int cmd,
1638                         unsigned long arg)
1639 {
1640         struct sock *sk = sock->sk;
1641
1642         switch(cmd) {
1643                 case SIOCOUTQ:
1644                 {
1645                         int amount = atomic_read(&sk->sk_wmem_alloc);
1646                         return put_user(amount, (int __user *)arg);
1647                 }
1648                 case SIOCINQ:
1649                 {
1650                         struct sk_buff *skb;
1651                         int amount = 0;
1652
1653                         spin_lock_bh(&sk->sk_receive_queue.lock);
1654                         skb = skb_peek(&sk->sk_receive_queue);
1655                         if (skb)
1656                                 amount = skb->len;
1657                         spin_unlock_bh(&sk->sk_receive_queue.lock);
1658                         return put_user(amount, (int __user *)arg);
1659                 }
1660                 case SIOCGSTAMP:
1661                         return sock_get_timestamp(sk, (struct timeval __user *)arg);
1662                 case SIOCGSTAMPNS:
1663                         return sock_get_timestampns(sk, (struct timespec __user *)arg);
1664
1665 #ifdef CONFIG_INET
1666                 case SIOCADDRT:
1667                 case SIOCDELRT:
1668                 case SIOCDARP:
1669                 case SIOCGARP:
1670                 case SIOCSARP:
1671                 case SIOCGIFADDR:
1672                 case SIOCSIFADDR:
1673                 case SIOCGIFBRDADDR:
1674                 case SIOCSIFBRDADDR:
1675                 case SIOCGIFNETMASK:
1676                 case SIOCSIFNETMASK:
1677                 case SIOCGIFDSTADDR:
1678                 case SIOCSIFDSTADDR:
1679                 case SIOCSIFFLAGS:
1680                         if (!net_eq(sock_net(sk), &init_net))
1681                                 return -ENOIOCTLCMD;
1682                         return inet_dgram_ops.ioctl(sock, cmd, arg);
1683 #endif
1684
1685                 default:
1686                         return -ENOIOCTLCMD;
1687         }
1688         return 0;
1689 }
1690
1691 #ifndef CONFIG_PACKET_MMAP
1692 #define packet_mmap sock_no_mmap
1693 #define packet_poll datagram_poll
1694 #else
1695
1696 static unsigned int packet_poll(struct file * file, struct socket *sock,
1697                                 poll_table *wait)
1698 {
1699         struct sock *sk = sock->sk;
1700         struct packet_sock *po = pkt_sk(sk);
1701         unsigned int mask = datagram_poll(file, sock, wait);
1702
1703         spin_lock_bh(&sk->sk_receive_queue.lock);
1704         if (po->pg_vec) {
1705                 unsigned last = po->head ? po->head-1 : po->frame_max;
1706
1707                 if (packet_lookup_frame(po, last, TP_STATUS_USER))
1708                         mask |= POLLIN | POLLRDNORM;
1709         }
1710         spin_unlock_bh(&sk->sk_receive_queue.lock);
1711         return mask;
1712 }
1713
1714
1715 /* Dirty? Well, I still did not learn better way to account
1716  * for user mmaps.
1717  */
1718
1719 static void packet_mm_open(struct vm_area_struct *vma)
1720 {
1721         struct file *file = vma->vm_file;
1722         struct socket * sock = file->private_data;
1723         struct sock *sk = sock->sk;
1724
1725         if (sk)
1726                 atomic_inc(&pkt_sk(sk)->mapped);
1727 }
1728
1729 static void packet_mm_close(struct vm_area_struct *vma)
1730 {
1731         struct file *file = vma->vm_file;
1732         struct socket * sock = file->private_data;
1733         struct sock *sk = sock->sk;
1734
1735         if (sk)
1736                 atomic_dec(&pkt_sk(sk)->mapped);
1737 }
1738
1739 static struct vm_operations_struct packet_mmap_ops = {
1740         .open = packet_mm_open,
1741         .close =packet_mm_close,
1742 };
1743
1744 static void free_pg_vec(char **pg_vec, unsigned int order, unsigned int len)
1745 {
1746         int i;
1747
1748         for (i = 0; i < len; i++) {
1749                 if (likely(pg_vec[i]))
1750                         free_pages((unsigned long) pg_vec[i], order);
1751         }
1752         kfree(pg_vec);
1753 }
1754
1755 static inline char *alloc_one_pg_vec_page(unsigned long order)
1756 {
1757         return (char *) __get_free_pages(GFP_KERNEL | __GFP_COMP | __GFP_ZERO,
1758                                          order);
1759 }
1760
1761 static char **alloc_pg_vec(struct tpacket_req *req, int order)
1762 {
1763         unsigned int block_nr = req->tp_block_nr;
1764         char **pg_vec;
1765         int i;
1766
1767         pg_vec = kzalloc(block_nr * sizeof(char *), GFP_KERNEL);
1768         if (unlikely(!pg_vec))
1769                 goto out;
1770
1771         for (i = 0; i < block_nr; i++) {
1772                 pg_vec[i] = alloc_one_pg_vec_page(order);
1773                 if (unlikely(!pg_vec[i]))
1774                         goto out_free_pgvec;
1775         }
1776
1777 out:
1778         return pg_vec;
1779
1780 out_free_pgvec:
1781         free_pg_vec(pg_vec, order, block_nr);
1782         pg_vec = NULL;
1783         goto out;
1784 }
1785
1786 static int packet_set_ring(struct sock *sk, struct tpacket_req *req, int closing)
1787 {
1788         char **pg_vec = NULL;
1789         struct packet_sock *po = pkt_sk(sk);
1790         int was_running, order = 0;
1791         __be16 num;
1792         int err = 0;
1793
1794         if (req->tp_block_nr) {
1795                 int i;
1796
1797                 /* Sanity tests and some calculations */
1798
1799                 if (unlikely(po->pg_vec))
1800                         return -EBUSY;
1801
1802                 switch (po->tp_version) {
1803                 case TPACKET_V1:
1804                         po->tp_hdrlen = TPACKET_HDRLEN;
1805                         break;
1806                 case TPACKET_V2:
1807                         po->tp_hdrlen = TPACKET2_HDRLEN;
1808                         break;
1809                 }
1810
1811                 if (unlikely((int)req->tp_block_size <= 0))
1812                         return -EINVAL;
1813                 if (unlikely(req->tp_block_size & (PAGE_SIZE - 1)))
1814                         return -EINVAL;
1815                 if (unlikely(req->tp_frame_size < po->tp_hdrlen +
1816                                                   po->tp_reserve))
1817                         return -EINVAL;
1818                 if (unlikely(req->tp_frame_size & (TPACKET_ALIGNMENT - 1)))
1819                         return -EINVAL;
1820
1821                 po->frames_per_block = req->tp_block_size/req->tp_frame_size;
1822                 if (unlikely(po->frames_per_block <= 0))
1823                         return -EINVAL;
1824                 if (unlikely((po->frames_per_block * req->tp_block_nr) !=
1825                              req->tp_frame_nr))
1826                         return -EINVAL;
1827
1828                 err = -ENOMEM;
1829                 order = get_order(req->tp_block_size);
1830                 pg_vec = alloc_pg_vec(req, order);
1831                 if (unlikely(!pg_vec))
1832                         goto out;
1833
1834                 for (i = 0; i < req->tp_block_nr; i++) {
1835                         void *ptr = pg_vec[i];
1836                         int k;
1837
1838                         for (k = 0; k < po->frames_per_block; k++) {
1839                                 __packet_set_status(po, ptr, TP_STATUS_KERNEL);
1840                                 ptr += req->tp_frame_size;
1841                         }
1842                 }
1843                 /* Done */
1844         } else {
1845                 if (unlikely(req->tp_frame_nr))
1846                         return -EINVAL;
1847         }
1848
1849         lock_sock(sk);
1850
1851         /* Detach socket from network */
1852         spin_lock(&po->bind_lock);
1853         was_running = po->running;
1854         num = po->num;
1855         if (was_running) {
1856                 __dev_remove_pack(&po->prot_hook);
1857                 po->num = 0;
1858                 po->running = 0;
1859                 __sock_put(sk);
1860         }
1861         spin_unlock(&po->bind_lock);
1862
1863         synchronize_net();
1864
1865         err = -EBUSY;
1866         if (closing || atomic_read(&po->mapped) == 0) {
1867                 err = 0;
1868 #define XC(a, b) ({ __typeof__ ((a)) __t; __t = (a); (a) = (b); __t; })
1869
1870                 spin_lock_bh(&sk->sk_receive_queue.lock);
1871                 pg_vec = XC(po->pg_vec, pg_vec);
1872                 po->frame_max = (req->tp_frame_nr - 1);
1873                 po->head = 0;
1874                 po->frame_size = req->tp_frame_size;
1875                 spin_unlock_bh(&sk->sk_receive_queue.lock);
1876
1877                 order = XC(po->pg_vec_order, order);
1878                 req->tp_block_nr = XC(po->pg_vec_len, req->tp_block_nr);
1879
1880                 po->pg_vec_pages = req->tp_block_size/PAGE_SIZE;
1881                 po->prot_hook.func = po->pg_vec ? tpacket_rcv : packet_rcv;
1882                 skb_queue_purge(&sk->sk_receive_queue);
1883 #undef XC
1884                 if (atomic_read(&po->mapped))
1885                         printk(KERN_DEBUG "packet_mmap: vma is busy: %d\n", atomic_read(&po->mapped));
1886         }
1887
1888         spin_lock(&po->bind_lock);
1889         if (was_running && !po->running) {
1890                 sock_hold(sk);
1891                 po->running = 1;
1892                 po->num = num;
1893                 dev_add_pack(&po->prot_hook);
1894         }
1895         spin_unlock(&po->bind_lock);
1896
1897         release_sock(sk);
1898
1899         if (pg_vec)
1900                 free_pg_vec(pg_vec, order, req->tp_block_nr);
1901 out:
1902         return err;
1903 }
1904
1905 static int packet_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
1906 {
1907         struct sock *sk = sock->sk;
1908         struct packet_sock *po = pkt_sk(sk);
1909         unsigned long size;
1910         unsigned long start;
1911         int err = -EINVAL;
1912         int i;
1913
1914         if (vma->vm_pgoff)
1915                 return -EINVAL;
1916
1917         size = vma->vm_end - vma->vm_start;
1918
1919         lock_sock(sk);
1920         if (po->pg_vec == NULL)
1921                 goto out;
1922         if (size != po->pg_vec_len*po->pg_vec_pages*PAGE_SIZE)
1923                 goto out;
1924
1925         start = vma->vm_start;
1926         for (i = 0; i < po->pg_vec_len; i++) {
1927                 struct page *page = virt_to_page(po->pg_vec[i]);
1928                 int pg_num;
1929
1930                 for (pg_num = 0; pg_num < po->pg_vec_pages; pg_num++, page++) {
1931                         err = vm_insert_page(vma, start, page);
1932                         if (unlikely(err))
1933                                 goto out;
1934                         start += PAGE_SIZE;
1935                 }
1936         }
1937         atomic_inc(&po->mapped);
1938         vma->vm_ops = &packet_mmap_ops;
1939         err = 0;
1940
1941 out:
1942         release_sock(sk);
1943         return err;
1944 }
1945 #endif
1946
1947
1948 static const struct proto_ops packet_ops_spkt = {
1949         .family =       PF_PACKET,
1950         .owner =        THIS_MODULE,
1951         .release =      packet_release,
1952         .bind =         packet_bind_spkt,
1953         .connect =      sock_no_connect,
1954         .socketpair =   sock_no_socketpair,
1955         .accept =       sock_no_accept,
1956         .getname =      packet_getname_spkt,
1957         .poll =         datagram_poll,
1958         .ioctl =        packet_ioctl,
1959         .listen =       sock_no_listen,
1960         .shutdown =     sock_no_shutdown,
1961         .setsockopt =   sock_no_setsockopt,
1962         .getsockopt =   sock_no_getsockopt,
1963         .sendmsg =      packet_sendmsg_spkt,
1964         .recvmsg =      packet_recvmsg,
1965         .mmap =         sock_no_mmap,
1966         .sendpage =     sock_no_sendpage,
1967 };
1968
1969 static const struct proto_ops packet_ops = {
1970         .family =       PF_PACKET,
1971         .owner =        THIS_MODULE,
1972         .release =      packet_release,
1973         .bind =         packet_bind,
1974         .connect =      sock_no_connect,
1975         .socketpair =   sock_no_socketpair,
1976         .accept =       sock_no_accept,
1977         .getname =      packet_getname,
1978         .poll =         packet_poll,
1979         .ioctl =        packet_ioctl,
1980         .listen =       sock_no_listen,
1981         .shutdown =     sock_no_shutdown,
1982         .setsockopt =   packet_setsockopt,
1983         .getsockopt =   packet_getsockopt,
1984         .sendmsg =      packet_sendmsg,
1985         .recvmsg =      packet_recvmsg,
1986         .mmap =         packet_mmap,
1987         .sendpage =     sock_no_sendpage,
1988 };
1989
1990 static struct net_proto_family packet_family_ops = {
1991         .family =       PF_PACKET,
1992         .create =       packet_create,
1993         .owner  =       THIS_MODULE,
1994 };
1995
1996 static struct notifier_block packet_netdev_notifier = {
1997         .notifier_call =packet_notifier,
1998 };
1999
2000 #ifdef CONFIG_PROC_FS
2001 static inline struct sock *packet_seq_idx(struct net *net, loff_t off)
2002 {
2003         struct sock *s;
2004         struct hlist_node *node;
2005
2006         sk_for_each(s, node, &net->packet.sklist) {
2007                 if (!off--)
2008                         return s;
2009         }
2010         return NULL;
2011 }
2012
2013 static void *packet_seq_start(struct seq_file *seq, loff_t *pos)
2014         __acquires(seq_file_net(seq)->packet.sklist_lock)
2015 {
2016         struct net *net = seq_file_net(seq);
2017         read_lock(&net->packet.sklist_lock);
2018         return *pos ? packet_seq_idx(net, *pos - 1) : SEQ_START_TOKEN;
2019 }
2020
2021 static void *packet_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2022 {
2023         struct net *net = seq_file_net(seq);
2024         ++*pos;
2025         return  (v == SEQ_START_TOKEN)
2026                 ? sk_head(&net->packet.sklist)
2027                 : sk_next((struct sock*)v) ;
2028 }
2029
2030 static void packet_seq_stop(struct seq_file *seq, void *v)
2031         __releases(seq_file_net(seq)->packet.sklist_lock)
2032 {
2033         struct net *net = seq_file_net(seq);
2034         read_unlock(&net->packet.sklist_lock);
2035 }
2036
2037 static int packet_seq_show(struct seq_file *seq, void *v)
2038 {
2039         if (v == SEQ_START_TOKEN)
2040                 seq_puts(seq, "sk       RefCnt Type Proto  Iface R Rmem   User   Inode\n");
2041         else {
2042                 struct sock *s = v;
2043                 const struct packet_sock *po = pkt_sk(s);
2044
2045                 seq_printf(seq,
2046                            "%p %-6d %-4d %04x   %-5d %1d %-6u %-6u %-6lu\n",
2047                            s,
2048                            atomic_read(&s->sk_refcnt),
2049                            s->sk_type,
2050                            ntohs(po->num),
2051                            po->ifindex,
2052                            po->running,
2053                            atomic_read(&s->sk_rmem_alloc),
2054                            sock_i_uid(s),
2055                            sock_i_ino(s) );
2056         }
2057
2058         return 0;
2059 }
2060
2061 static const struct seq_operations packet_seq_ops = {
2062         .start  = packet_seq_start,
2063         .next   = packet_seq_next,
2064         .stop   = packet_seq_stop,
2065         .show   = packet_seq_show,
2066 };
2067
2068 static int packet_seq_open(struct inode *inode, struct file *file)
2069 {
2070         return seq_open_net(inode, file, &packet_seq_ops,
2071                             sizeof(struct seq_net_private));
2072 }
2073
2074 static const struct file_operations packet_seq_fops = {
2075         .owner          = THIS_MODULE,
2076         .open           = packet_seq_open,
2077         .read           = seq_read,
2078         .llseek         = seq_lseek,
2079         .release        = seq_release_net,
2080 };
2081
2082 #endif
2083
2084 static int packet_net_init(struct net *net)
2085 {
2086         rwlock_init(&net->packet.sklist_lock);
2087         INIT_HLIST_HEAD(&net->packet.sklist);
2088
2089         if (!proc_net_fops_create(net, "packet", 0, &packet_seq_fops))
2090                 return -ENOMEM;
2091
2092         return 0;
2093 }
2094
2095 static void packet_net_exit(struct net *net)
2096 {
2097         proc_net_remove(net, "packet");
2098 }
2099
2100 static struct pernet_operations packet_net_ops = {
2101         .init = packet_net_init,
2102         .exit = packet_net_exit,
2103 };
2104
2105
2106 static void __exit packet_exit(void)
2107 {
2108         unregister_netdevice_notifier(&packet_netdev_notifier);
2109         unregister_pernet_subsys(&packet_net_ops);
2110         sock_unregister(PF_PACKET);
2111         proto_unregister(&packet_proto);
2112 }
2113
2114 static int __init packet_init(void)
2115 {
2116         int rc = proto_register(&packet_proto, 0);
2117
2118         if (rc != 0)
2119                 goto out;
2120
2121         sock_register(&packet_family_ops);
2122         register_pernet_subsys(&packet_net_ops);
2123         register_netdevice_notifier(&packet_netdev_notifier);
2124 out:
2125         return rc;
2126 }
2127
2128 module_init(packet_init);
2129 module_exit(packet_exit);
2130 MODULE_LICENSE("GPL");
2131 MODULE_ALIAS_NETPROTO(PF_PACKET);