On Thu, Nov 16, 2017 at 05:58:21PM +0000, Marc Zyngier wrote: > VTTBR_BADDR_MASK is used to sanity check the size and alignment of the > VTTBR address. It seems to currently be off by one, thereby only > allowing up to 39-bit addresses (instead of 40-bit) and also > insufficiently checking the alignment. This patch fixes it. > > This patch is the 32bit pendent of Kristina's arm64 fix, and > she deserves the actual kudos for pinpointing that one. > > Fixes: f7ed45be3ba52 ("KVM: ARM: World-switch implementation") > Cc: <stable@xxxxxxxxxxxxxxx> # 3.9 > Reported-by: Kristina Martsenko <kristina.martsenko@xxxxxxx> > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> Reviewed-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > --- > arch/arm/include/asm/kvm_arm.h | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/arch/arm/include/asm/kvm_arm.h b/arch/arm/include/asm/kvm_arm.h > index c8781450905b..3ab8b3781bfe 100644 > --- a/arch/arm/include/asm/kvm_arm.h > +++ b/arch/arm/include/asm/kvm_arm.h > @@ -161,8 +161,7 @@ > #else > #define VTTBR_X (5 - KVM_T0SZ) > #endif > -#define VTTBR_BADDR_SHIFT (VTTBR_X - 1) > -#define VTTBR_BADDR_MASK (((_AC(1, ULL) << (40 - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT) > +#define VTTBR_BADDR_MASK (((_AC(1, ULL) << (40 - VTTBR_X)) - 1) << VTTBR_X) > #define VTTBR_VMID_SHIFT _AC(48, ULL) > #define VTTBR_VMID_MASK(size) (_AT(u64, (1 << size) - 1) << VTTBR_VMID_SHIFT) > > -- > 2.14.2 >