Message ID | 1453932970-14576-4-git-send-email-edgar.iglesias@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Edgar E. Iglesias <edgar.iglesias@gmail.com> writes: > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com> > > Implement the inputsize > pamax check for Stage 2 translations. > This is CONSTRAINED UNPREDICTABLE and we choose to fault. > > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Much cleaner now, thanks. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > target-arm/helper.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/target-arm/helper.c b/target-arm/helper.c > index 13e9933..9f75840 100644 > --- a/target-arm/helper.c > +++ b/target-arm/helper.c > @@ -6790,6 +6790,7 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level, > } > > if (is_aa64) { > + CPUARMState *env = &cpu->env; > unsigned int pamax = arm_pamax(cpu); > > switch (stride) { > @@ -6811,6 +6812,13 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level, > default: > g_assert_not_reached(); > } > + > + /* Inputsize checks. */ > + if (inputsize > pamax && > + (arm_el_is_aa64(env, 1) || inputsize > 40)) { > + /* This is CONSTRAINED UNPREDICTABLE and we choose to fault. */ > + return false; > + } > } else { > /* AArch32 only supports 4KB pages. Assert on that. */ > assert(stride == 9); -- Alex Bennée
diff --git a/target-arm/helper.c b/target-arm/helper.c index 13e9933..9f75840 100644 --- a/target-arm/helper.c +++ b/target-arm/helper.c @@ -6790,6 +6790,7 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level, } if (is_aa64) { + CPUARMState *env = &cpu->env; unsigned int pamax = arm_pamax(cpu); switch (stride) { @@ -6811,6 +6812,13 @@ static bool check_s2_mmu_setup(ARMCPU *cpu, bool is_aa64, int level, default: g_assert_not_reached(); } + + /* Inputsize checks. */ + if (inputsize > pamax && + (arm_el_is_aa64(env, 1) || inputsize > 40)) { + /* This is CONSTRAINED UNPREDICTABLE and we choose to fault. */ + return false; + } } else { /* AArch32 only supports 4KB pages. Assert on that. */ assert(stride == 9);