[NETLINK]: Fix infinite loops in synchronous netlink changes.
The qlen should continue to decrement, even if we pop partially processed SKBs back onto the receive queue. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2a0a6ebee1
commit
09e1430598
@ -626,14 +626,13 @@ static void rtnetlink_rcv(struct sock *sk, int len)
|
||||
if (qlen > skb_queue_len(&sk->sk_receive_queue))
|
||||
qlen = skb_queue_len(&sk->sk_receive_queue);
|
||||
|
||||
while (qlen--) {
|
||||
for (; qlen; qlen--) {
|
||||
skb = skb_dequeue(&sk->sk_receive_queue);
|
||||
if (rtnetlink_rcv_skb(skb)) {
|
||||
if (skb->len) {
|
||||
if (skb->len)
|
||||
skb_queue_head(&sk->sk_receive_queue,
|
||||
skb);
|
||||
qlen++;
|
||||
} else
|
||||
else
|
||||
kfree_skb(skb);
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user