Applied, thanks!

Sergey Bugaev, le jeu. 11 mai 2023 16:58:43 +0300, a ecrit:
> Commit 31dd30a94a682955c3c9e2f42252b4a07687067a "add setting gs/fsbase"
> added the code to set fs and gs bases on context_switch. However, this
> was only being done when switching context via the explicit
> switch_context() method, but not in other cases where the context is
> switched, such as with call_continuation().
> 
> Instead, put setting fsgs base into switch_ktss(), where it will be
> called in all cases.
> ---
>  i386/i386/pcb.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/i386/i386/pcb.c b/i386/i386/pcb.c
> index 8a9e3bf4..a5efb9a8 100644
> --- a/i386/i386/pcb.c
> +++ b/i386/i386/pcb.c
> @@ -223,6 +223,11 @@ void switch_ktss(pcb_t pcb)
>          pcb->ims.user_gdt, sizeof pcb->ims.user_gdt);
>  #endif /* MACH_PV_DESCRIPTORS */
>  
> +#if defined(__x86_64__) && !defined(USER32)
> +     wrmsr(MSR_REG_FSBASE, pcb->iss.fsbase);
> +     wrmsr(MSR_REG_GSBASE, pcb->iss.gsbase);
> +#endif
> +
>       db_load_context(pcb);
>  
>       /*
> @@ -373,10 +378,6 @@ thread_t switch_context(
>        *      Load the rest of the user state for the new thread
>        */
>       switch_ktss(new->pcb);
> -#if defined(__x86_64__) && !defined(USER32)
> -        wrmsr(MSR_REG_FSBASE, new->pcb->iss.fsbase);
> -        wrmsr(MSR_REG_GSBASE, new->pcb->iss.gsbase);
> -#endif
>       return Switch_context(old, continuation, new);
>  }
>  
> -- 
> 2.40.1
> 
> 

-- 
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.

Reply via email to