[PATCH 3/3] lib: sbi: fix is_region_valid
Xiang W
wxjstz at 126.com
Wed Nov 23 19:04:41 PST 2022
When order is equal to __riscv_xlen, the shift operation will not
perform any operation, which will cause
reg->base & (BIT(reg->order) - 1) to always be 0, and the condition
has not been established. This patch fixes this bug
Signed-off-by: Xiang W <wxjstz at 126.com>
---
lib/sbi/sbi_domain.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c
index eba60f6..1acf76c 100644
--- a/lib/sbi/sbi_domain.c
+++ b/lib/sbi/sbi_domain.c
@@ -142,6 +142,9 @@ static bool is_region_valid(const struct sbi_domain_memregion *reg)
if (reg->order < 3 || __riscv_xlen < reg->order)
return FALSE;
+ if (reg->order == __riscv_xlen && reg->base != 0)
+ return FALSE;
+
if (reg->base & (BIT(reg->order) - 1))
return FALSE;
--
2.30.2
More information about the opensbi
mailing list