Skip to content

Commit

Permalink
filter: constify sk_run_filter()
Browse files Browse the repository at this point in the history
sk_run_filter() doesnt write on skb, change its prototype to reflect
this.

Fix two af_packet comments.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Dec 8, 2010
1 parent 38f49e8 commit 62ab081
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 20 deletions.
2 changes: 1 addition & 1 deletion include/linux/filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ struct sk_buff;
struct sock;

extern int sk_filter(struct sock *sk, struct sk_buff *skb);
extern unsigned int sk_run_filter(struct sk_buff *skb,
extern unsigned int sk_run_filter(const struct sk_buff *skb,
const struct sock_filter *filter);
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
extern int sk_detach_filter(struct sock *sk);
Expand Down
7 changes: 4 additions & 3 deletions net/core/filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ enum {
};

/* No hurry in this branch */
static void *__load_pointer(struct sk_buff *skb, int k)
static void *__load_pointer(const struct sk_buff *skb, int k)
{
u8 *ptr = NULL;

Expand All @@ -102,7 +102,7 @@ static void *__load_pointer(struct sk_buff *skb, int k)
return NULL;
}

static inline void *load_pointer(struct sk_buff *skb, int k,
static inline void *load_pointer(const struct sk_buff *skb, int k,
unsigned int size, void *buffer)
{
if (k >= 0)
Expand Down Expand Up @@ -160,7 +160,8 @@ EXPORT_SYMBOL(sk_filter);
* and last instruction guaranteed to be a RET, we dont need to check
* flen. (We used to pass to this function the length of filter)
*/
unsigned int sk_run_filter(struct sk_buff *skb, const struct sock_filter *fentry)
unsigned int sk_run_filter(const struct sk_buff *skb,
const struct sock_filter *fentry)
{
void *ptr;
u32 A = 0; /* Accumulator */
Expand Down
2 changes: 1 addition & 1 deletion net/core/timestamping.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ static struct sock_filter ptp_filter[] = {
PTP_FILTER
};

static unsigned int classify(struct sk_buff *skb)
static unsigned int classify(const struct sk_buff *skb)
{
if (likely(skb->dev &&
skb->dev->phydev &&
Expand Down
31 changes: 16 additions & 15 deletions net/packet/af_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,8 @@ static int packet_sendmsg_spkt(struct kiocb *iocb, struct socket *sock,
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;
Expand All @@ -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,
Expand All @@ -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));
Expand Down

0 comments on commit 62ab081

Please sign in to comment.