From e87abd81a2c40fedde48ee5e9e53212fcdb28311 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Wed, 2 Oct 2019 12:26:47 +0100 Subject: [PATCH] synaptics-rmi: Fix the packing of the partition table The data was part of the union, not the struct. It's also binary format and thus needs to be packed. --- plugins/synaptics-rmi/fu-synaptics-rmi-v7-device.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/synaptics-rmi/fu-synaptics-rmi-v7-device.c b/plugins/synaptics-rmi/fu-synaptics-rmi-v7-device.c index a4d56a181..d1ac81b84 100644 --- a/plugins/synaptics-rmi/fu-synaptics-rmi-v7-device.c +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-v7-device.c @@ -381,14 +381,15 @@ fu_synaptics_rmi_v7_device_read_blocks (FuSynapticsRmiDevice *self, return TRUE; } -typedef struct { +typedef struct __attribute__((packed)) { guint16 partition_id; guint16 partition_len; guint16 partition_addr; guint16 partition_prop; - guint16 data[8]; } RmiPartitionTbl; +G_STATIC_ASSERT(sizeof(RmiPartitionTbl) == 8); + static gboolean fu_synaptics_rmi_device_read_flash_config_v7 (FuSynapticsRmiDevice *self, GError **error) { @@ -464,7 +465,7 @@ fu_synaptics_rmi_device_read_flash_config_v7 (FuSynapticsRmiDevice *self, GError } /* parse the config length */ - for (guint i = 0x2; i < buf_sz; i = i + 0x8) { + for (guint i = 0x2; i < buf_sz; i += sizeof(RmiPartitionTbl)) { RmiPartitionTbl tbl; if (!fu_memcpy_safe ((guint8 *) &tbl, sizeof(tbl), 0x0, /* dst */ buf, buf_sz, i, /* src */