aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet
diff options
context:
space:
mode:
Diffstat (limited to 'net/packet')
-rw-r--r--net/packet/af_packet.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index a11c731d2ee..17eafe5b48c 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -517,7 +517,8 @@ out_free:
517 return err; 517 return err;
518} 518}
519 519
520static inline unsigned int run_filter(struct sk_buff *skb, struct sock *sk, 520static inline unsigned int run_filter(const struct sk_buff *skb,
521 const struct sock *sk,
521 unsigned int res) 522 unsigned int res)
522{ 523{
523 struct sk_filter *filter; 524 struct sk_filter *filter;
@@ -532,15 +533,15 @@ static inline unsigned int run_filter(struct sk_buff *skb, struct sock *sk,
532} 533}
533 534
534/* 535/*
535 This function makes lazy skb cloning in hope that most of packets 536 * This function makes lazy skb cloning in hope that most of packets
536 are discarded by BPF. 537 * are discarded by BPF.
537 538 *
538 Note tricky part: we DO mangle shared skb! skb->data, skb->len 539 * Note tricky part: we DO mangle shared skb! skb->data, skb->len
539 and skb->cb are mangled. It works because (and until) packets 540 * and skb->cb are mangled. It works because (and until) packets
540 falling here are owned by current CPU. Output packets are cloned 541 * falling here are owned by current CPU. Output packets are cloned
541 by dev_queue_xmit_nit(), input packets are processed by net_bh 542 * by dev_queue_xmit_nit(), input packets are processed by net_bh
542 sequencially, so that if we return skb to original state on exit, 543 * sequencially, so that if we return skb to original state on exit,
543 we will not harm anyone. 544 * we will not harm anyone.
544 */ 545 */
545 546
546static int packet_rcv(struct sk_buff *skb, struct net_device *dev, 547static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
@@ -566,11 +567,11 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
566 567
567 if (dev->header_ops) { 568 if (dev->header_ops) {
568 /* The device has an explicit notion of ll header, 569 /* The device has an explicit notion of ll header,
569 exported to higher levels. 570 * exported to higher levels.
570 571 *
571 Otherwise, the device hides datails of it frame 572 * Otherwise, the device hides details of its frame
572 structure, so that corresponding packet head 573 * structure, so that corresponding packet head is
573 never delivered to user. 574 * never delivered to user.
574 */ 575 */
575 if (sk->sk_type != SOCK_DGRAM) 576 if (sk->sk_type != SOCK_DGRAM)
576 skb_push(skb, skb->data - skb_mac_header(skb)); 577 skb_push(skb, skb->data - skb_mac_header(skb));