]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Byte order to host before using the lifetime
authorNacho Barrientos <nacho.barrientos@cern.ch>
Mon, 29 Nov 2021 13:17:55 +0000 (14:17 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 29 Nov 2021 18:05:02 +0000 (03:05 +0900)
I've seen this in `NetworkManager-1.34.0-0.3.el8.x86_64` (latest in CentOS
Stream 8 at the time of writing this message) which does not use the latest
Systemd but probably the code base is the same (see
https://github.com/NetworkManager/NetworkManager/commit/51f93e00a23fbd09f5ad96da6290bf4ca737d46a).

Before the patch:

```
libsystemd: eth0: DHCPv6 client: T1 expires in 34y 3w 6d 45min 31s
libsystemd: eth0: DHCPv6 client: T2 expires in 54y 5month 3w 3d 23h 20min 35s
```

After the patch:

```
libsystemd: eth0: DHCPv6 client: T1 expires in 3d 7h 58min 3s
libsystemd: eth0: DHCPv6 client: T2 expires in 5d 2h 26min 50s
```

same box (x86_64 system) and same DHCPv6 server.

This regression has likely been introduced by 8a8955507af363c31297bbc5df79852db4ad39d6.

src/libsystemd-network/dhcp6-option.c

index 42792d1d2fc1e940c5ce6a0817fa044c32343b2f..28fe036a4095efa197101a16d189a18873e2f0c7 100644 (file)
@@ -817,7 +817,7 @@ int dhcp6_option_parse_ia(
                                 /* Ignore the sub-option on non-critical errors. */
                                 continue;
 
-                        lt_min = MIN(lt_min, a->iaaddr.lifetime_valid);
+                        lt_min = MIN(lt_min, be32toh(a->iaaddr.lifetime_valid));
                         LIST_PREPEND(addresses, ia.addresses, a);
                         break;
                 }
@@ -836,7 +836,7 @@ int dhcp6_option_parse_ia(
                                 /* Ignore the sub-option on non-critical errors. */
                                 continue;
 
-                        lt_min = MIN(lt_min, a->iapdprefix.lifetime_valid);
+                        lt_min = MIN(lt_min, be32toh(a->iapdprefix.lifetime_valid));
                         LIST_PREPEND(addresses, ia.addresses, a);
                         break;
                 }