]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
hw/arm/smmu-common: Fix TTB1 handling
authorJean-Philippe Brucker <jean-philippe@linaro.org>
Tue, 14 Feb 2023 17:19:22 +0000 (17:19 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 16 Feb 2023 16:00:48 +0000 (16:00 +0000)
Addresses targeting the second translation table (TTB1) in the SMMU have
all upper bits set (except for the top byte when TBI is enabled). Fix
the TTB1 check.

Reported-by: Ola Hugosson <ola.hugosson@arm.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Message-id: 20230214171921.1917916-3-jean-philippe@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/arm/smmu-common.c

index 2b8c67b9a1d65282cef3c120107685c1be3e2c5c..0a5a60ca1e91ccc368a17ede2da32e09874c5f8f 100644 (file)
@@ -249,7 +249,7 @@ SMMUTransTableInfo *select_tt(SMMUTransCfg *cfg, dma_addr_t iova)
         /* there is a ttbr0 region and we are in it (high bits all zero) */
         return &cfg->tt[0];
     } else if (cfg->tt[1].tsz &&
-           !extract64(iova, 64 - cfg->tt[1].tsz, cfg->tt[1].tsz - tbi_byte)) {
+        sextract64(iova, 64 - cfg->tt[1].tsz, cfg->tt[1].tsz - tbi_byte) == -1) {
         /* there is a ttbr1 region and we are in it (high bits all one) */
         return &cfg->tt[1];
     } else if (!cfg->tt[0].tsz) {