aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2005-05-03 19:15:59 -0400
committerDavid S. Miller <davem@davemloft.net>2005-05-03 19:15:59 -0400
commit0f4821e7b93fe72e89b8ff393bd8e705bd178aa5 (patch)
treee9116a4ce6593b186c3962fcdc5baf73f243d0b5 /net
parent09e14305982efc2f3b509d3c50ef5dcbff64a998 (diff)
[XFRM/RTNETLINK]: Decrement qlen properly in {xfrm_,rt}netlink_rcv().
If we free up a partially processed packet because it's skb->len dropped to zero, we need to decrement qlen because we are dropping out of the top-level loop so it will do the decrement for us. Spotted by Herbert Xu. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/rtnetlink.c4
-rw-r--r--net/xfrm/xfrm_user.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 75b6d33b5292..00caf4b318b2 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -632,8 +632,10 @@ static void rtnetlink_rcv(struct sock *sk, int len)
632 if (skb->len) 632 if (skb->len)
633 skb_queue_head(&sk->sk_receive_queue, 633 skb_queue_head(&sk->sk_receive_queue,
634 skb); 634 skb);
635 else 635 else {
636 kfree_skb(skb); 636 kfree_skb(skb);
637 qlen--;
638 }
637 break; 639 break;
638 } 640 }
639 kfree_skb(skb); 641 kfree_skb(skb);
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index e8740a4a1d78..5ddda2c98af9 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1024,8 +1024,10 @@ static void xfrm_netlink_rcv(struct sock *sk, int len)
1024 if (skb->len) 1024 if (skb->len)
1025 skb_queue_head(&sk->sk_receive_queue, 1025 skb_queue_head(&sk->sk_receive_queue,
1026 skb); 1026 skb);
1027 else 1027 else {
1028 kfree_skb(skb); 1028 kfree_skb(skb);
1029 qlen--;
1030 }
1029 break; 1031 break;
1030 } 1032 }
1031 kfree_skb(skb); 1033 kfree_skb(skb);