On Thu, 17 Mar 2022 at 05:53, Richard Henderson
<richard.hender...@linaro.org> wrote:
>
> Create an array of masks which detail the writable and readonly
> bits for each control register.  Apply them when writing to
> control registers, including the write to status during eret.
>
> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>

> @@ -34,6 +34,15 @@ void helper_raise_exception(CPUNios2State *env, uint32_t 
> index)
>  #ifndef CONFIG_USER_ONLY
>  void helper_eret(CPUNios2State *env, uint32_t new_status, uint32_t new_pc)
>  {
> +    Nios2CPU *cpu = env_archcpu(env);
> +
> +    /*
> +     * Both estatus and bstatus have no constraints on write;
> +     * do not allow reserved fields in status to be set.
> +     */
> +    new_status &= (cpu->cr_state[CR_STATUS].writable |
> +                   cpu->cr_state[CR_STATUS].readonly);
> +
>      env->ctrl[CR_STATUS] = new_status;

Isn't this allowing the guest to write to readonly bits ?

>      env->pc = new_pc;
>      cpu_loop_exit(env_cpu(env));

-- PMM

Reply via email to