[PATCH] lib: sbi: sbi_mpxy_set_shmem adds parameter check
Anup Patel
anup at brainfault.org
Mon Apr 14 21:54:10 PDT 2025
On Wed, Mar 19, 2025 at 6:07 PM Xiang W <wxjstz at 126.com> wrote:
>
> Shared memory needs to be accessed in M-Mode, and the high address of
> physical memory should be 0
The patch subject and description needs to be improved but I will take care
of it at the time of merging this patch.
>
> Signed-off-by: Xiang W <wxjstz at 126.com>
> ---
> lib/sbi/sbi_mpxy.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/lib/sbi/sbi_mpxy.c b/lib/sbi/sbi_mpxy.c
> index c5d9d1bb..7d4d26ab 100644
> --- a/lib/sbi/sbi_mpxy.c
> +++ b/lib/sbi/sbi_mpxy.c
> @@ -287,6 +287,20 @@ int sbi_mpxy_set_shmem(unsigned long shmem_phys_lo,
> if (shmem_phys_lo & ~PAGE_MASK)
> return SBI_ERR_INVALID_PARAM;
>
> + /*
> + * On RV32, the M-mode can only access the first 4GB of
> + * the physical address space because M-mode does not have
> + * MMU to access full 34-bit physical address space.
> + * So fail if the upper 32 bits of the physical address
> + * is non-zero on RV32.
> + *
> + * On RV64, kernel sets upper 64bit address part to zero.
> + * So fail if the upper 64bit of the physical address
> + * is non-zero on RV64.
> + */
> + if (shmem_phys_hi)
> + return SBI_ERR_INVALID_PARAM;
The error code should be SBI_ERR_INVALID_ADDRESS to align
with the SBI spec. I will address this at the time of merging this
patch.
> +
> if (!sbi_domain_check_addr_range(sbi_domain_thishart_ptr(),
> SHMEM_PHYS_ADDR(shmem_phys_hi, shmem_phys_lo),
> mpxy_shmem_size, PRV_S,
> --
> 2.47.2
>
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
More information about the opensbi
mailing list