lib: sbi: Fixed memory permission check in sbi_dbtr_setup_shmem
authorXiang W <wxjstz@126.com>
Fri, 3 May 2024 13:53:36 +0000 (21:53 +0800)
committerAnup Patel <anup@brainfault.org>
Mon, 13 May 2024 11:09:39 +0000 (16:39 +0530)
The previous code detected shmem_phys_hi and shmem_phys_lo as two
addresses. fix this bug

Signed-off-by: Xiang W <wxjstz@126.com>
Reviewed-by: Himanshu Chauhan <hchauhan@ventanamicro.com>
lib/sbi/sbi_dbtr.c

index 94fd049004affb3ba5104b5c218c10e3518ef3cb..a95f087f1013ed29f1bc08bde889d9ac7fb28c86 100644 (file)
@@ -293,17 +293,11 @@ int sbi_dbtr_setup_shmem(const struct sbi_domain *dom, unsigned long smode,
        if (shmem_phys_lo & SBI_DBTR_SHMEM_ALIGN_MASK)
                return SBI_ERR_INVALID_PARAM;
 
-       if (dom && !sbi_domain_check_addr(dom, shmem_phys_lo, smode,
-                                         SBI_DOMAIN_READ | SBI_DOMAIN_WRITE))
+       if (dom && !sbi_domain_check_addr(dom,
+                 DBTR_SHMEM_MAKE_PHYS(shmem_phys_hi, shmem_phys_lo), smode,
+                 SBI_DOMAIN_READ | SBI_DOMAIN_WRITE))
                return SBI_ERR_INVALID_ADDRESS;
 
-       if (shmem_phys_hi != SBI_DBTR_SHMEM_INVALID_ADDR) {
-               if (dom &&
-                   !sbi_domain_check_addr(dom, shmem_phys_hi, smode,
-                                          SBI_DOMAIN_READ | SBI_DOMAIN_WRITE))
-                       return SBI_ERR_INVALID_ADDRESS;
-       }
-
        hart_state = dbtr_thishart_state_ptr();
        if (!hart_state)
                return SBI_ERR_FAILED;