netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 1/3] net: ipv6/addrconf: ensure that regen_advance is at least 2 seconds
@ 2024-02-09  6:10 Alex Henrie
  2024-02-09  6:10 ` [PATCH net-next 2/3] net: ipv6/addrconf: introduce a regen_min_advance sysctl Alex Henrie
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Alex Henrie @ 2024-02-09  6:10 UTC (permalink / raw)
  To: netdev, dan, bagasdotme, davem, dsahern, edumazet, kuba, pabeni,
	jikos
  Cc: Alex Henrie

RFC 8981 defines REGEN_ADVANCE as follows:

REGEN_ADVANCE = 2 + (TEMP_IDGEN_RETRIES * DupAddrDetectTransmits * RetransTimer / 1000)

Thus, allowing it to be less than 2 seconds is technically a protocol
violation.

Link: https://datatracker.ietf.org/doc/html/rfc8981#name-defined-protocol-parameters
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
 net/ipv6/addrconf.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index d63f5d063f07..99a3ab6ec9d2 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1331,6 +1331,13 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 	in6_ifa_put(ifp);
 }
 
+static unsigned long ipv6_get_regen_advance(struct inet6_dev *idev)
+{
+	return 2 + idev->cnf.regen_max_retry *
+			idev->cnf.dad_transmits *
+			max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
+}
+
 static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
 {
 	struct inet6_dev *idev = ifp->idev;
@@ -1372,9 +1379,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
 
 	age = (now - ifp->tstamp) / HZ;
 
-	regen_advance = idev->cnf.regen_max_retry *
-			idev->cnf.dad_transmits *
-			max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
+	regen_advance = ipv6_get_regen_advance(idev);
 
 	/* recalculate max_desync_factor each time and update
 	 * idev->desync_factor if it's larger
@@ -4577,9 +4582,7 @@ static void addrconf_verify_rtnl(struct net *net)
 			    !ifp->regen_count && ifp->ifpub) {
 				/* This is a non-regenerated temporary addr. */
 
-				unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
-					ifp->idev->cnf.dad_transmits *
-					max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
+				unsigned long regen_advance = ipv6_get_regen_advance(ifp->idev);
 
 				if (age + regen_advance >= ifp->prefered_lft) {
 					struct inet6_ifaddr *ifpub = ifp->ifpub;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2024-02-15 14:50 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-09  6:10 [PATCH net-next 1/3] net: ipv6/addrconf: ensure that regen_advance is at least 2 seconds Alex Henrie
2024-02-09  6:10 ` [PATCH net-next 2/3] net: ipv6/addrconf: introduce a regen_min_advance sysctl Alex Henrie
2024-02-13 15:36   ` David Ahern
2024-02-09  6:10 ` [PATCH net-next 3/3] net: ipv6/addrconf: clamp preferred_lft to the minimum required Alex Henrie
2024-02-13 10:13   ` Paolo Abeni
2024-02-13 15:40     ` David Ahern
2024-02-13 21:07       ` Dan Moulding
2024-02-13 15:35 ` [PATCH net-next 1/3] net: ipv6/addrconf: ensure that regen_advance is at least 2 seconds David Ahern
2024-02-14  6:26 ` [PATCH net-next v2 0/3] net: ipv6/addrconf: ensure that temporary addresses' preferred lifetimes are long enough Alex Henrie
2024-02-14  6:26   ` [PATCH net-next v2 1/3] net: ipv6/addrconf: ensure that regen_advance is at least 2 seconds Alex Henrie
2024-02-14 15:38     ` David Ahern
2024-02-14  6:26   ` [PATCH net-next v2 2/3] net: ipv6/addrconf: introduce a regen_min_advance sysctl Alex Henrie
2024-02-14 15:39     ` David Ahern
2024-02-14  6:26   ` [PATCH net-next v2 3/3] net: ipv6/addrconf: clamp preferred_lft to the minimum required Alex Henrie
2024-02-14 15:40     ` David Ahern
2024-02-15 14:50   ` [PATCH net-next v2 0/3] net: ipv6/addrconf: ensure that temporary addresses' preferred lifetimes are long enough patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).