Browse Source

[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>
David S. Miller 20 years ago
parent
commit
0f4821e7b9
2 changed files with 6 additions and 2 deletions
  1. 3 1
      net/core/rtnetlink.c
  2. 3 1
      net/xfrm/xfrm_user.c

+ 3 - 1
net/core/rtnetlink.c

@@ -632,8 +632,10 @@ static void rtnetlink_rcv(struct sock *sk, int len)
 				if (skb->len)
 				if (skb->len)
 					skb_queue_head(&sk->sk_receive_queue,
 					skb_queue_head(&sk->sk_receive_queue,
 						       skb);
 						       skb);
-				else
+				else {
 					kfree_skb(skb);
 					kfree_skb(skb);
+					qlen--;
+				}
 				break;
 				break;
 			}
 			}
 			kfree_skb(skb);
 			kfree_skb(skb);

+ 3 - 1
net/xfrm/xfrm_user.c

@@ -1024,8 +1024,10 @@ static void xfrm_netlink_rcv(struct sock *sk, int len)
 				if (skb->len)
 				if (skb->len)
 					skb_queue_head(&sk->sk_receive_queue,
 					skb_queue_head(&sk->sk_receive_queue,
 						       skb);
 						       skb);
-				else
+				else {
 					kfree_skb(skb);
 					kfree_skb(skb);
+					qlen--;
+				}
 				break;
 				break;
 			}
 			}
 			kfree_skb(skb);
 			kfree_skb(skb);