From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Date: Mon, 19 May 2008 23:54:29 +0000 (-0700)
Subject: ipv6 addrconf: Fix route lifetime setting in corner case.
X-Git-Tag: firefly_0821_release~20112^2~27
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a3264435b4ca1ccee54cbef2970f2ba4bef39e2d;p=firefly-linux-kernel-4.4.55.git

ipv6 addrconf: Fix route lifetime setting in corner case.

Because of arithmetic overflow avoidance, the actual lifetime setting
(vs the value given by RA) did not increase monotonically around
0x7fffffff/HZ.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 12bba0880345..98aa50c11dd6 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -475,7 +475,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
 	lifetime = ntohl(rinfo->lifetime);
 	if (lifetime == 0xffffffff) {
 		/* infinity */
-	} else if (lifetime > 0x7fffffff/HZ) {
+	} else if (lifetime > 0x7fffffff/HZ - 1) {
 		/* Avoid arithmetic overflow */
 		lifetime = 0x7fffffff/HZ - 1;
 	}