|
@@ -517,7 +517,8 @@ out_free:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static inline unsigned int run_filter(struct sk_buff *skb, struct sock *sk,
|
|
|
+static inline unsigned int run_filter(const struct sk_buff *skb,
|
|
|
+ const struct sock *sk,
|
|
|
unsigned int res)
|
|
|
{
|
|
|
struct sk_filter *filter;
|
|
@@ -532,15 +533,15 @@ static inline unsigned int run_filter(struct sk_buff *skb, struct sock *sk,
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- This function makes lazy skb cloning in hope that most of packets
|
|
|
- are discarded by BPF.
|
|
|
-
|
|
|
- Note tricky part: we DO mangle shared skb! skb->data, skb->len
|
|
|
- and skb->cb are mangled. It works because (and until) packets
|
|
|
- falling here are owned by current CPU. Output packets are cloned
|
|
|
- by dev_queue_xmit_nit(), input packets are processed by net_bh
|
|
|
- sequencially, so that if we return skb to original state on exit,
|
|
|
- we will not harm anyone.
|
|
|
+ * This function makes lazy skb cloning in hope that most of packets
|
|
|
+ * are discarded by BPF.
|
|
|
+ *
|
|
|
+ * Note tricky part: we DO mangle shared skb! skb->data, skb->len
|
|
|
+ * and skb->cb are mangled. It works because (and until) packets
|
|
|
+ * falling here are owned by current CPU. Output packets are cloned
|
|
|
+ * by dev_queue_xmit_nit(), input packets are processed by net_bh
|
|
|
+ * sequencially, so that if we return skb to original state on exit,
|
|
|
+ * we will not harm anyone.
|
|
|
*/
|
|
|
|
|
|
static 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,
|
|
|
|
|
|
if (dev->header_ops) {
|
|
|
/* The device has an explicit notion of ll header,
|
|
|
- exported to higher levels.
|
|
|
-
|
|
|
- Otherwise, the device hides datails of it frame
|
|
|
- structure, so that corresponding packet head
|
|
|
- never delivered to user.
|
|
|
+ * exported to higher levels.
|
|
|
+ *
|
|
|
+ * Otherwise, the device hides details of its frame
|
|
|
+ * structure, so that corresponding packet head is
|
|
|
+ * never delivered to user.
|
|
|
*/
|
|
|
if (sk->sk_type != SOCK_DGRAM)
|
|
|
skb_push(skb, skb->data - skb_mac_header(skb));
|