af_netlink: drop_monitor/dropwatch friendly
Need to consume_skb() instead of kfree_skb() in netlink_dump() and netlink_unicast_kernel() to avoid false dropwatch positives. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
658cb354ed
commit
bfb253c9b2
1 changed files with 10 additions and 2 deletions
|
@ -154,6 +154,12 @@ static void netlink_destroy_callback(struct netlink_callback *cb)
|
||||||
kfree(cb);
|
kfree(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void netlink_consume_callback(struct netlink_callback *cb)
|
||||||
|
{
|
||||||
|
consume_skb(cb->skb);
|
||||||
|
kfree(cb);
|
||||||
|
}
|
||||||
|
|
||||||
static void netlink_sock_destruct(struct sock *sk)
|
static void netlink_sock_destruct(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct netlink_sock *nlk = nlk_sk(sk);
|
struct netlink_sock *nlk = nlk_sk(sk);
|
||||||
|
@ -902,8 +908,10 @@ static int netlink_unicast_kernel(struct sock *sk, struct sk_buff *skb)
|
||||||
ret = skb->len;
|
ret = skb->len;
|
||||||
skb_set_owner_r(skb, sk);
|
skb_set_owner_r(skb, sk);
|
||||||
nlk->netlink_rcv(skb);
|
nlk->netlink_rcv(skb);
|
||||||
|
consume_skb(skb);
|
||||||
|
} else {
|
||||||
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
kfree_skb(skb);
|
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1728,7 +1736,7 @@ static int netlink_dump(struct sock *sk)
|
||||||
nlk->cb = NULL;
|
nlk->cb = NULL;
|
||||||
mutex_unlock(nlk->cb_mutex);
|
mutex_unlock(nlk->cb_mutex);
|
||||||
|
|
||||||
netlink_destroy_callback(cb);
|
netlink_consume_callback(cb);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
errout_skb:
|
errout_skb:
|
||||||
|
|
Loading…
Add table
Reference in a new issue