bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 04/12 gnumach] locore: Fix int stack check


From: Samuel Thibault
Subject: Re: [PATCH 04/12 gnumach] locore: Fix int stack check
Date: Tue, 31 Jan 2023 21:00:30 +0100
User-agent: NeoMutt/20170609 (1.8.3)

Applied, thanks!

Damien Zammit, le mar. 31 janv. 2023 09:36:38 +0000, a ecrit:
> TODO: Return kernel_id via lookup table, not apic_id
> 
> ---
>  i386/i386/cpu_number.h |  7 +++++++
>  i386/i386/locore.S     | 15 +++++++++------
>  2 files changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/i386/i386/cpu_number.h b/i386/i386/cpu_number.h
> index 9aef6370..a6dd47d6 100644
> --- a/i386/i386/cpu_number.h
> +++ b/i386/i386/cpu_number.h
> @@ -35,6 +35,13 @@
>  /* More-specific code must define cpu_number() and CPU_NUMBER.  */
>  #ifdef __i386__
>  #define      CX(addr, reg)   addr(,reg,4)
> +
> +#define      CPU_NUMBER(reg) \
> +     movl    %cs:lapic, reg          ;\
> +     movl    %cs:APIC_ID(reg), reg   ;\
> +     shrl    $24, reg                ;\
> +
> +
>  #endif
>  #ifdef __x86_64__
>  #define      CX(addr, reg)   addr(,reg,8)
> diff --git a/i386/i386/locore.S b/i386/i386/locore.S
> index ff78e80d..5ac238f7 100644
> --- a/i386/i386/locore.S
> +++ b/i386/i386/locore.S
> @@ -541,13 +541,15 @@ _kret_iret:
>  trap_from_kernel:
>  #if  MACH_KDB || MACH_TTD
>       movl    %esp,%ebx               /* save current stack */
> -
>       movl    %esp,%edx               /* on an interrupt stack? */
> -     and     $(~(KERNEL_STACK_SIZE-1)),%edx
> -     cmpl    EXT(int_stack_base),%edx
> +
> +     CPU_NUMBER(%ecx)
> +     and     $(~(INTSTACK_SIZE-1)),%edx
> +     cmpl    CX(EXT(int_stack_base),%ecx),%edx
>       je      1f                      /* OK if so */
> 
> -     CPU_NUMBER(%edx)                /* get CPU number */
> +     movl    %ecx,%edx
> +
>       cmpl    CX(EXT(kernel_stack),%edx),%esp
>                                       /* already on kernel stack? */
>       ja      0f
> @@ -668,9 +670,10 @@ ENTRY(all_intrs)
>       pushl   %edx
>       cld                             /* clear direction flag */
> 
> +     CPU_NUMBER(%ecx)
>       movl    %esp,%edx               /* on an interrupt stack? */
> -     and     $(~(KERNEL_STACK_SIZE-1)),%edx
> -     cmpl    %ss:EXT(int_stack_base),%edx
> +     and     $(~(INTSTACK_SIZE-1)),%edx
> +     cmpl    %ss:CX(EXT(int_stack_base),%ecx),%edx
>       je      int_from_intstack       /* if not: */
> 
>       pushl   %ds                     /* save segment registers */
> --
> 2.34.1
> 
> 
> 

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]