[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] accel/tcg: Fix undefined shift in store_whole_le16
From: |
Peter Maydell |
Subject: |
Re: [PATCH] accel/tcg: Fix undefined shift in store_whole_le16 |
Date: |
Tue, 6 Jun 2023 18:44:04 +0100 |
On Tue, 6 Jun 2023 at 18:16, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> The computation is documented as unused in this case,
> but triggers an ubsan error:
>
> ../accel/tcg/ldst_atomicity.c.inc:837:33: runtime error: shift exponent -32
> is negative
> SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
> ../accel/tcg/ldst_atomicity.c.inc:837:33 in
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>
> Hi Peter. Found this while merge testing FEAT_LSE.
> Clearly my bug, which I ought to have found earlier.
>
>
> r~
>
> ---
> accel/tcg/ldst_atomicity.c.inc | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/accel/tcg/ldst_atomicity.c.inc b/accel/tcg/ldst_atomicity.c.inc
> index 2514899408..de70531a7a 100644
> --- a/accel/tcg/ldst_atomicity.c.inc
> +++ b/accel/tcg/ldst_atomicity.c.inc
> @@ -833,7 +833,9 @@ static uint64_t store_whole_le16(void *pv, int size,
> Int128 val_le)
> }
> store_atom_insert_al16(pv - o, v, m);
>
> - /* Unused if sz <= 64. */
> + if (sz <= 64) {
> + return 0;
> + }
> return int128_gethi(val_le) >> (sz - 64);
> }
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM