lpi_cache_get_hppi() is a function we pass to g_hash_table_foreach() to iterate over the LPI cache hashtable. This hash table has keys which are GINT_TO_POINTER(intid) and values which hold the L2 ISTE value, allocated as "hashvalue = g_new(uint32_t, 1)".
The function is passed the key and value as type 'gpointer' and has to cast them to the real types itself, but it incorrectly casts the value pointer to a uint64_t*. This works on little-endian hosts (since we only read specific fields of the L2 ISTE using bitmasking), but won't work on big-endian, and trips the clang sanitizer. Fix the pointer type. Cc: [email protected] Fixes: a0562ada75e ("hw/intc/arm_gicv5: Calculate HPPI in the IRS") Signed-off-by: Peter Maydell <[email protected]> --- hw/intc/arm_gicv5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/intc/arm_gicv5.c b/hw/intc/arm_gicv5.c index fd6456cd8aa..a362349e5ed 100644 --- a/hw/intc/arm_gicv5.c +++ b/hw/intc/arm_gicv5.c @@ -390,7 +390,7 @@ typedef struct GetHPPIUserData { static void lpi_cache_get_hppi(gpointer key, gpointer value, gpointer user_data) { uint64_t id = GPOINTER_TO_INT(key); - uint64_t l2_iste = *(uint64_t *)value; + uint64_t l2_iste = *(uint32_t *)value; uint32_t prio, iaffid; GetHPPIUserData *ud = user_data; -- 2.43.0
