Revert "net: ipv6/addrconf: clamp preferred_lft to the minimum required"
authorAlex Henrie <alexhenrie24@gmail.com>
Sat, 30 Dec 2023 04:32:44 +0000 (21:32 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 2 Jan 2024 22:58:46 +0000 (14:58 -0800)
The commit had a bug and might not have been the right approach anyway.

Fixes: 629df6701c8a ("net: ipv6/addrconf: clamp preferred_lft to the minimum required")
Fixes: ec575f885e3e ("Documentation: networking: explain what happens if temp_prefered_lft is too small or too large")
Reported-by: Dan Moulding <dan@danm.net>
Closes: https://lore.kernel.org/netdev/20231221231115.12402-1-dan@danm.net/
Link: https://lore.kernel.org/netdev/CAMMLpeTdYhd=7hhPi2Y7pwdPCgnnW5JYh-bu3hSc7im39uxnEA@mail.gmail.com/
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20231230043252.10530-1-alexhenrie24@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/ip-sysctl.rst
net/ipv6/addrconf.c

index 4dfe0d9a57bb42e4151a38c6aac9cbd8ddeef11a..7afff42612e949c912c4ff8a5abc5bfe55842a79 100644 (file)
@@ -2511,7 +2511,7 @@ temp_valid_lft - INTEGER
 temp_prefered_lft - INTEGER
        Preferred lifetime (in seconds) for temporary addresses. If
        temp_prefered_lft is less than the minimum required lifetime (typically
-       5 seconds), the preferred lifetime is the minimum required. If
+       5 seconds), temporary addresses will not be created. If
        temp_prefered_lft is greater than temp_valid_lft, the preferred lifetime
        is temp_valid_lft.
 
index 2692a7b24c40977a44c33358f558090036338f2c..733ace18806c61f487d83081dc6d39d079959f77 100644 (file)
@@ -1407,23 +1407,15 @@ retry:
 
        write_unlock_bh(&idev->lock);
 
-       /* From RFC 4941:
-        *
-        *     A temporary address is created only if this calculated Preferred
-        *     Lifetime is greater than REGEN_ADVANCE time units.  In
-        *     particular, an implementation must not create a temporary address
-        *     with a zero Preferred Lifetime.
-        *
-        * Clamp the preferred lifetime to a minimum of regen_advance, unless
-        * that would exceed valid_lft.
-        *
+       /* A temporary address is created only if this calculated Preferred
+        * Lifetime is greater than REGEN_ADVANCE time units.  In particular,
+        * an implementation must not create a temporary address with a zero
+        * Preferred Lifetime.
         * Use age calculation as in addrconf_verify to avoid unnecessary
         * temporary addresses being generated.
         */
        age = (now - tmp_tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
-       if (cfg.preferred_lft <= regen_advance + age)
-               cfg.preferred_lft = regen_advance + age + 1;
-       if (cfg.preferred_lft > cfg.valid_lft) {
+       if (cfg.preferred_lft <= regen_advance + age) {
                in6_ifa_put(ifp);
                in6_dev_put(idev);
                ret = -1;