[PATCH] lib: sbi: Respect scounteren when emulating the time CSR

Anup Patel anup at brainfault.org
Mon Sep 23 05:49:48 PDT 2024


On Fri, Aug 30, 2024 at 1:52 AM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> This optimization creates a correctness issue, as it prevents supervisor
> software from restricting VS-mode or U-mode access to the time CSR for
> its own purposes.
>
> Closes: https://github.com/riscv-software-src/opensbi/issues/370
> Fixes: ebc8ebc0f846 ("lib: sbi: Improve HPM CSR read/write emulation")
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>
>  lib/sbi/sbi_emulate_csr.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/lib/sbi/sbi_emulate_csr.c b/lib/sbi/sbi_emulate_csr.c
> index 869c81f4..3adec78d 100644
> --- a/lib/sbi/sbi_emulate_csr.c
> +++ b/lib/sbi/sbi_emulate_csr.c
> @@ -66,12 +66,11 @@ int sbi_emulate_csr_read(int csr_num, struct sbi_trap_regs *regs,
>                 *csr_val = csr_read(CSR_MCYCLE);
>                 break;
>         case CSR_TIME:
> +               if (!hpm_allowed(csr_num - CSR_CYCLE, prev_mode, virt))
> +                       return SBI_ENOTSUPP;
>                 /*
>                  * We emulate TIME CSR for both Host (HS/U-mode) and
>                  * Guest (VS/VU-mode).
> -                *
> -                * Faster TIME CSR reads are critical for good performance
> -                * in S-mode software so we don't check CSR permissions.
>                  */
>                 *csr_val = (virt) ? sbi_timer_virt_value():
>                                     sbi_timer_value();
> --
> 2.45.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list