From b639b7f5c69e01784bf05b62ab63b2561e3fe067 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Sun, 14 Jun 2020 22:16:49 +0200 Subject: 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 --- ltunify.c | 14 ++++++-------- 1 file 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; } -- cgit v1.2.1