summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2020-06-14 22:16:49 +0200
committerPeter Wu <peter@lekensteyn.nl>2020-06-14 22:16:49 +0200
commitb639b7f5c69e01784bf05b62ab63b2561e3fe067 (patch)
treee353555590f73c26b736fd89fdb2eff5e588f3da
parent5c8283480df26a8414fd1cdace667665163bca98 (diff)
downloadltunify-b639b7f5c69e01784bf05b62ab63b2561e3fe067.tar.gz
ltunify: fix minor alignment warning with the receiver-info command
Caught by UndefinedBehaviorSanitizer (UBSan): ltunify.c:785:32: runtime error: load of misaligned address 0x7ffc0e4c38a5 for type 'uint32_t' (aka 'unsigned int'), which requires 4 byte alignment
-rw-r--r--ltunify.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/ltunify.c b/ltunify.c
index f5e46f7..17ec081 100644
--- a/ltunify.c
+++ b/ltunify.c
@@ -778,11 +778,10 @@ bool get_receiver_info(int fd, struct receiver_info *rinfo) {
params[0] = 0x03; // undocumented
if (get_long_register(fd, DEVICE_RECEIVER, REG_PAIRING_INFO, params, &msg)) {
struct msg_receiver_info *info = (struct msg_receiver_info *) &msg.msg_long.str;
- uint32_t *serial_numberp;
+ uint32_t serial_number;
- serial_numberp = (uint32_t *) &info->serial_number;
-
- rinfo->serial_number = ntohl(*serial_numberp);
+ memcpy(&serial_number, &info->serial_number, sizeof(serial_number));
+ rinfo->serial_number = ntohl(serial_number);
return true;
}
return false;
@@ -810,12 +809,11 @@ bool get_device_ext_pair_info(int fd, u8 device_index) {
params[0] = 0x30 | (device_index - 1); // 0x30..0x3F Unifying Device extended pairing info
if (get_long_register(fd, DEVICE_RECEIVER, REG_PAIRING_INFO, params, &msg)) {
struct msg_dev_ext_pair_info *info;
- uint32_t *serial_numberp;
+ uint32_t serial_number;
info = (struct msg_dev_ext_pair_info *) &msg.msg_long.str;
- serial_numberp = (uint32_t *) &info->serial_number;
-
- dev->serial_number = ntohl(*serial_numberp);
+ memcpy(&serial_number, &info->serial_number, sizeof(serial_number));
+ dev->serial_number = ntohl(serial_number);
dev->power_switch_location = info->usability_info & 0x0F;
return true;
}