[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [Qemu-devel] [PATCH 13/13] target/arm: Add v8M stack chec
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-arm] [Qemu-devel] [PATCH 13/13] target/arm: Add v8M stack checks for MSR to SP_NS |
Date: |
Wed, 3 Oct 2018 12:18:17 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0 |
On 02/10/2018 18:35, Peter Maydell wrote:
> Updating the NS stack pointer via MSR to SP_NS should include
> a check whether the new SP value is below the stack limit.
> No other kinds of update to the various stack pointer and
> limit registers via MSR should perform a check.
>
> Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
> ---
> target/arm/helper.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index 074f7616272..712828674fa 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -10963,11 +10963,23 @@ void HELPER(v7m_msr)(CPUARMState *env, uint32_t
> maskreg, uint32_t val)
> * currently in handler mode or not, using the NS CONTROL.SPSEL.
> */
> bool spsel = env->v7m.control[M_REG_NS] &
> R_V7M_CONTROL_SPSEL_MASK;
> + bool is_psp = !arm_v7m_is_handler_mode(env) && spsel;
> + uint32_t limit;
>
> if (!env->v7m.secure) {
> return;
> }
> - if (!arm_v7m_is_handler_mode(env) && spsel) {
> +
> + limit = is_psp ? env->v7m.psplim[false] : env->v7m.msplim[false];
> +
> + if (val < limit) {
> + CPUState *cs = CPU(arm_env_get_cpu(env));
> +
> + cpu_restore_state(cs, GETPC(), true);
> + raise_exception(env, EXCP_STKOF, 0, 1);
> + }
> +
> + if (is_psp) {
> env->v7m.other_ss_psp = val;
> } else {
> env->v7m.other_ss_msp = val;
>
- [Qemu-arm] [PATCH 08/13] target/arm: Add v8M stack checks for LDRD/STRD (imm), (continued)
- [Qemu-arm] [PATCH 08/13] target/arm: Add v8M stack checks for LDRD/STRD (imm), Peter Maydell, 2018/10/02
- [Qemu-arm] [PATCH 10/13] target/arm: Add v8M stack checks for T32 load/store single, Peter Maydell, 2018/10/02
- [Qemu-arm] [PATCH 11/13] target/arm: Add v8M stack checks for Thumb push/pop, Peter Maydell, 2018/10/02
- [Qemu-arm] [PATCH 13/13] target/arm: Add v8M stack checks for MSR to SP_NS, Peter Maydell, 2018/10/02
- [Qemu-arm] [PATCH 12/13] target/arm: Add v8M stack checks for VLDM/VSTM, Peter Maydell, 2018/10/02