summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/icmp6-util.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-04-13 18:02:48 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-04-16 13:26:58 +0900
commit789f5c6f706383442d85a9aedc6396a1a7877057 (patch)
tree3f1518f0b952ebfb72de2f1ec4669f84f050bdd8 /src/libsystemd-network/icmp6-util.c
parent4836f4c67d040f51b7d1aa45b73553eb0da26097 (diff)
downloadsystemd-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.c8
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))