]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
[PATCH] Fix DST leak in icmp_push_reply()
authorPatrick McHardy <kaber@trash.net>
Thu, 18 Aug 2005 18:59:37 +0000 (20:59 +0200)
committerChris Wright <chrisw@osdl.org>
Mon, 29 Aug 2005 16:55:12 +0000 (09:55 -0700)
Based upon a bug report and initial patch by
Ollie Wild.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@osdl.org>
net/ipv4/icmp.c

index cb759484979d94d46d946a66cca3ef4bf87d84a1..62bded75f773c0fa566b742a8cf332a6c1a9a470 100644 (file)
@@ -349,12 +349,12 @@ static void icmp_push_reply(struct icmp_bxm *icmp_param,
 {
        struct sk_buff *skb;
 
-       ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param,
-                      icmp_param->data_len+icmp_param->head_len,
-                      icmp_param->head_len,
-                      ipc, rt, MSG_DONTWAIT);
-
-       if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) {
+       if (ip_append_data(icmp_socket->sk, icmp_glue_bits, icmp_param,
+                          icmp_param->data_len+icmp_param->head_len,
+                          icmp_param->head_len,
+                          ipc, rt, MSG_DONTWAIT) < 0)
+               ip_flush_pending_frames(icmp_socket->sk);
+       else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) {
                struct icmphdr *icmph = skb->h.icmph;
                unsigned int csum = 0;
                struct sk_buff *skb1;