[PATCH 4/4] KVM: arm64: vgic-v5: Correctly handle host ISTE __le32 conversion
Fuad Tabba
fuad.tabba at linux.dev
Sun Sep 20 07:42:10 PDT 2026
Hi Marc,
On Sat, 19 Sep 2026 13:31:50 +0100, Marc Zyngier <maz at kernel.org> wrote:
[...]
> diff --git a/arch/arm64/kvm/vgic/vgic-v5-tables.c b/arch/arm64/kvm/vgic/vgic-v5-tables.c
[...]
> @@ -1466,8 +1465,9 @@ static int vgic_v5_save_linear_ist(const struct vgic_v5_ist_desc *ist,
>
> for (index = 0; index < nr_entries; index++) {
> __le32 *h_iste_addr = ist->base + index * ist->iste_size;
> + u32 h_iste;
>
> - h_iste = READ_ONCE(*h_iste_addr);
> + h_iste = le32_to_cpu(READ_ONCE(*h_iste_addr));
> ret = put_user(h_iste, uaddr);
arm-vgic-v5.rst documents the IST buffers as little-endian entries,
which is what the raw __le32 copy gave userspace. With le32_to_cpu()
here a BE host would hand out native-endian entries instead. Making
uaddr a __le32 __user * (it's a u32 __user * today) keeps the
documented format, and sparse is clean with it too.
With that:
Reviewed-by: Fuad Tabba <fuad.tabba at linux.dev>
Cheers,
/fuad
More information about the linux-arm-kernel
mailing list