On 28/04/2025 23:20, Nabih Estefan wrote:
> Running with `--enable-ubsan` leads to a qtest failure:
> ```
> ../tests/qtest/libqos/igb.c:106:5: runtime error: load of misaligned address 0x562040be8e33 for type 'uint32_t', which requires 4 byte alignment
> ```
> Instead of straight casting the uint8_t array, we use memcpy to assure
> alignment is correct against uint32_t and uint16_t.
>
> Change-Id: Ibd2bc3d870ea37bcbaf2e459806a22ae17464049
> Google-Bug-Id: 391659542
> Signed-off-by: Nabih Estefan <nabihestefan@google.com>
> ---
> hw/pci/remote_pci.c | 0
> tests/qtest/libqos/igb.c | 8 ++++++--
> 2 files changed, 6 insertions(+), 2 deletions(-)
> create mode 100644 hw/pci/remote_pci.c
>
> diff --git a/hw/pci/remote_pci.c b/hw/pci/remote_pci.c
> new file mode 100644
> index 0000000000..e69de29bb2
It seems you are adding an empty file here.
> diff --git a/tests/qtest/libqos/igb.c b/tests/qtest/libqos/igb.c
> index f40c4ec4cd..f31b1a7261 100644
> --- a/tests/qtest/libqos/igb.c
> +++ b/tests/qtest/libqos/igb.c
> @@ -103,11 +103,15 @@ static void igb_pci_start_hw(QOSGraphObject *obj)
> e1000e_macreg_write(&d->e1000e, E1000_RDLEN(0), E1000E_RING_LEN);
> e1000e_macreg_write(&d->e1000e, E1000_RDT(0), 0);
> e1000e_macreg_write(&d->e1000e, E1000_RDH(0), 0);
> + uint32_t safe32_address;
We generally don't mix variable declaration and code.
> + memcpy(&safe32_address, address, sizeof(uint32_t));
> e1000e_macreg_write(&d->e1000e, E1000_RA,
> - le32_to_cpu(*(uint32_t *)address));
> + le32_to_cpu(safe32_address));
I think you could use instead ldl_le_p() instead.
> + uint16_t safe16_address;
> + memcpy(&safe16_address, (address + 4), sizeof(uint16_t));
> e1000e_macreg_write(&d->e1000e, E1000_RA + 4,
> E1000_RAH_AV | E1000_RAH_POOL_1 |
> - le16_to_cpu(*(uint16_t *)(address + 4)));
> + le16_to_cpu(safe16_address));
You could use lduw_le_p().
>
> /* Set supported receive descriptor mode */
> e1000e_macreg_write(&d->e1000e,
Thanks,
Laurent