[PATCH v2] lib: sbi: Fix sign-extension in sbi_misaligned_load_handler()
Atish Patra
atishp at atishpatra.org
Mon Dec 21 18:57:51 EST 2020
On Sun, Dec 20, 2020 at 8:26 PM Anup Patel <anup.patel at wdc.com> wrote:
>
> The misaligned load emulation does not sign-extend values correctly
> due to missing sign typecast in value passed to the SET_RD() macro.
>
> A very easy way to reproduce this issue is to load 16-bit value
> 0xff1e from a byte aligned address using LH instruction on hardware
> lacking misaligned load/store.
>
> This patch fixes sbi_misaligned_load_handler() for above issue.
>
> Signed-off-by: Anup Patel <anup.patel at wdc.com>
> ---
> Changes since v1:
> - Cast after left-shift and use braces.
> ---
> lib/sbi/sbi_misaligned_ldst.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/sbi/sbi_misaligned_ldst.c b/lib/sbi/sbi_misaligned_ldst.c
> index 964a372..5057cb5 100644
> --- a/lib/sbi/sbi_misaligned_ldst.c
> +++ b/lib/sbi/sbi_misaligned_ldst.c
> @@ -128,7 +128,7 @@ int sbi_misaligned_load_handler(ulong addr, ulong tval2, ulong tinst,
> }
>
> if (!fp)
> - SET_RD(insn, regs, val.data_ulong << shift >> shift);
> + SET_RD(insn, regs, ((long)(val.data_ulong << shift)) >> shift);
> #ifdef __riscv_flen
> else if (len == 8)
> SET_F64_RD(insn, regs, val.data_u64);
> --
> 2.25.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Reviewed-by: Atish Patra <atish.patra at wdc.com>
--
Regards,
Atish
More information about the opensbi
mailing list