From: Daniel Silverstone Date: Fri, 19 Oct 2007 11:32:24 +0000 (+0200) Subject: Avoid infinite loop in ip addr flush. X-Git-Tag: v2.6.26~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b3d366e0677c53767fca6b59677ee356b65b6da;p=thirdparty%2Fiproute2.git Avoid infinite loop in ip addr flush. Fix "ip addr flush" the same way "ip neigh flush" was previously fixed, by bailing out if the flush hasn't completed after MAX_ROUNDS (10) tries. --- diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 59c71c83c..373312f2c 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -35,6 +35,8 @@ #include "ll_map.h" #include "ip_common.h" +#define MAX_ROUNDS 10 + static struct { int ifindex; @@ -684,7 +686,7 @@ static int ipaddr_list_or_flush(int argc, char **argv, int flush) filter.flushp = 0; filter.flushe = sizeof(flushb); - for (;;) { + while (round < MAX_ROUNDS) { if (rtnl_wilddump_request(&rth, filter.family, RTM_GETADDR) < 0) { perror("Cannot send dump request"); exit(1); @@ -711,6 +713,8 @@ static int ipaddr_list_or_flush(int argc, char **argv, int flush) fflush(stdout); } } + fprintf(stderr, "*** Flush remains incomplete after %d rounds. ***\n", MAX_ROUNDS); fflush(stderr); + return 1; } if (filter.family != AF_PACKET) {