Skip to content

Commit

Permalink
iommu/io-pgtable-arm: avoid speculative walks through TTBR1
Browse files Browse the repository at this point in the history
Although we set TCR.T1SZ to 0, the input address range covered by TTBR1
is actually calculated using T0SZ in this case on the ARM SMMU. This
could theoretically lead to speculative table walks through physical
address zero, leading to all sorts of fun and games if we have MMIO
regions down there.

This patch avoids the issue by setting EPD1 to disable walks through
the unused TTBR1 register.

Signed-off-by: Will Deacon <[email protected]>
  • Loading branch information
wildea01 committed Mar 27, 2015
1 parent 03edb22 commit 63979b8
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/iommu/io-pgtable-arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@
#define ARM_32_LPAE_TCR_EAE (1 << 31)
#define ARM_64_LPAE_S2_TCR_RES1 (1 << 31)

#define ARM_LPAE_TCR_EPD1 (1 << 23)

#define ARM_LPAE_TCR_TG0_4K (0 << 14)
#define ARM_LPAE_TCR_TG0_64K (1 << 14)
#define ARM_LPAE_TCR_TG0_16K (2 << 14)
Expand Down Expand Up @@ -621,6 +623,9 @@ arm_64_lpae_alloc_pgtable_s1(struct io_pgtable_cfg *cfg, void *cookie)
}

reg |= (64ULL - cfg->ias) << ARM_LPAE_TCR_T0SZ_SHIFT;

/* Disable speculative walks through TTBR1 */
reg |= ARM_LPAE_TCR_EPD1;
cfg->arm_lpae_s1_cfg.tcr = reg;

/* MAIRs */
Expand Down

0 comments on commit 63979b8

Please sign in to comment.