Re: [PATCH] hw/i386/amd_iommu: Avoid undefined behavior in amdvi_setevent_bits()

Alejandro Jimenez <[email protected]>
Newsgroups gmane.comp.emulators.qemu
Message-ID <[email protected]>
Hi Thomas,

nit: The commit subject prefix should simply be "amd_iommu".

On 7/31/26 10:02 AM, Thomas Huth wrote:
> From: Thomas Huth <[email protected]>
> 
> The code in amdvi_encode_event() calls amdvi_setevent_bits() with
> start = 64:
> 
>     amdvi_setevent_bits(evt, addr, 64, 64);
> 
> and amdvi_setevent_bits() then calculates:
> 
>     uint64_t mask = MAKE_64BIT_MASK(start, length);
> 
> but this MAKE_64BIT_MASK() macro shifts a value left by "start" bit
> positions. Shifting left by more than 63 is undefined behavior and
> could have unexpected results with different compilers / architectures.
> 
> Fix it by using "bitpos" instead, which was likely the original
> intended behavior anyway. (bitpos is calculated as bitpos = start % 64).
>


Fixes: 1d5b128cbeea ("hw/iommu: Fix problems reported by Coverity scan")

> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3633
> Signed-off-by: Thomas Huth <[email protected]>

Reviewed-by: Alejandro Jimenez <[email protected]>

> ---
>  hw/i386/amd_iommu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c
> index 90252c52af4..578c27ccbef 100644
> --- a/hw/i386/amd_iommu.c
> +++ b/hw/i386/amd_iommu.c
> @@ -323,7 +323,7 @@ static void amdvi_setevent_bits(uint64_t *buffer, uint64_t value, int start,
>                                  int length)
>  {
>      int index = start / 64, bitpos = start % 64;
> -    uint64_t mask = MAKE_64BIT_MASK(start, length);
> +    uint64_t mask = MAKE_64BIT_MASK(bitpos, length);
>      buffer[index] &= ~mask;
>      buffer[index] |= (value << bitpos) & mask;
>  }
> -- 
> 2.55.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.