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/icmp6-util.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/icmp6-util.c')
-rw-r--r-- | src/libsystemd-network/icmp6-util.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libsystemd-network/icmp6-util.c b/src/libsystemd-network/icmp6-util.c index fba5c3bd96..ecddab61e4 100644 --- a/src/libsystemd-network/icmp6-util.c +++ b/src/libsystemd-network/icmp6-util.c @@ -199,9 +199,11 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst, } 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))); + cmsg->cmsg_type == SCM_TIMESTAMP && + cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval))) { + struct timeval *tv = memcpy(&(struct timeval) {}, CMSG_DATA(cmsg), sizeof(struct timeval)); + triple_timestamp_from_realtime(&t, timeval_load(tv)); + } } if (!triple_timestamp_is_set(&t)) |