lib: sbi: Fix is_region_valid()
authorXiang W <wxjstz@126.com>
Thu, 24 Nov 2022 03:16:05 +0000 (11:16 +0800)
committerAnup Patel <anup@brainfault.org>
Sun, 4 Dec 2022 16:22:52 +0000 (21:52 +0530)
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@126.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
lib/sbi/sbi_domain.c

index fec9074..3302213 100644 (file)
@@ -146,6 +146,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;