From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Sat, 12 Nov 2005 20:12:05 +0000 (-0800)
Subject: [IPV6]: Fix rtnetlink dump infinite loop
X-Git-Tag: firefly_0821_release~40109
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=efacfbcb6c88677809f44a574fbcd9824835dccb;p=firefly-linux-kernel-4.4.55.git

[IPV6]: Fix rtnetlink dump infinite loop

The recent change to netlink dump "done" callback handling broke IPv6
which played dirty tricks with the "done" callback.  This causes an
infinite loop during a dump.

The following patch fixes it.

This bug was reported by Jeff Garzik.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index f7f42c3e96cb..a7a537b50595 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1701,10 +1701,8 @@ static void fib6_dump_end(struct netlink_callback *cb)
 		fib6_walker_unlink(w);
 		kfree(w);
 	}
-	if (cb->args[1]) {
-		cb->done = (void*)cb->args[1];
-		cb->args[1] = 0;
-	}
+	cb->done = (void*)cb->args[1];
+	cb->args[1] = 0;
 }
 
 static int fib6_dump_done(struct netlink_callback *cb)