diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-04-13 18:02:48 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-04-16 13:26:58 +0900 |
commit | 789f5c6f706383442d85a9aedc6396a1a7877057 (patch) | |
tree | 3f1518f0b952ebfb72de2f1ec4669f84f050bdd8 /src/libsystemd-network/sd-dhcp6-client.c | |
parent | 4836f4c67d040f51b7d1aa45b73553eb0da26097 (diff) | |
download | systemd-789f5c6f706383442d85a9aedc6396a1a7877057.tar.gz |
tree-wide: copy timestamp data from cmsg
On RISCV32, time_t is 64bit and size_t is 32bit, hence the timestamp
data in message header may not be aligned.
Fixes #27241.
Diffstat (limited to 'src/libsystemd-network/sd-dhcp6-client.c')
-rw-r--r-- | src/libsystemd-network/sd-dhcp6-client.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 57dd91f81f..6d62ba380b 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -1276,7 +1276,6 @@ static int client_receive_message( .msg_control = &control, .msg_controllen = sizeof(control), }; - struct cmsghdr *cmsg; triple_timestamp t = {}; _cleanup_free_ DHCP6Message *message = NULL; struct in6_addr *server_address = NULL; @@ -1320,12 +1319,9 @@ static int client_receive_message( server_address = &sa.in6.sin6_addr; } - CMSG_FOREACH(cmsg, &msg) { - if (cmsg->cmsg_level == SOL_SOCKET && - cmsg->cmsg_type == SO_TIMESTAMP && - cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval))) - triple_timestamp_from_realtime(&t, timeval_load(CMSG_TYPED_DATA(cmsg, struct timeval))); - } + struct timeval *tv = CMSG_FIND_AND_COPY_DATA(&msg, SOL_SOCKET, SCM_TIMESTAMP, struct timeval); + if (tv) + triple_timestamp_from_realtime(&t, timeval_load(tv)); if (client->transaction_id != (message->transaction_id & htobe32(0x00ffffff))) return 0; |