mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
lib: sbi: Add parameter check in sbi_mpxy_set_shmem()
Shared memory needs to be accessed in M-Mode so for now the high address of shared memory can't non-zero. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20250319123719.504622-1-wxjstz@126.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -287,6 +287,20 @@ int sbi_mpxy_set_shmem(unsigned long shmem_phys_lo,
|
|||||||
if (shmem_phys_lo & ~PAGE_MASK)
|
if (shmem_phys_lo & ~PAGE_MASK)
|
||||||
return SBI_ERR_INVALID_PARAM;
|
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_ADDRESS;
|
||||||
|
|
||||||
if (!sbi_domain_check_addr_range(sbi_domain_thishart_ptr(),
|
if (!sbi_domain_check_addr_range(sbi_domain_thishart_ptr(),
|
||||||
SHMEM_PHYS_ADDR(shmem_phys_hi, shmem_phys_lo),
|
SHMEM_PHYS_ADDR(shmem_phys_hi, shmem_phys_lo),
|
||||||
mpxy_shmem_size, PRV_S,
|
mpxy_shmem_size, PRV_S,
|
||||||
|
Reference in New Issue
Block a user