[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH gnumach] x86_64/locore.S: Fix int stack checks when NCPUS > 1
From: |
Samuel Thibault |
Subject: |
Re: [PATCH gnumach] x86_64/locore.S: Fix int stack checks when NCPUS > 1 |
Date: |
Sat, 28 Oct 2023 13:07:31 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Damien Zammit, le sam. 28 oct. 2023 00:13:54 +0000, a ecrit:
> ---
> x86_64/locore.S | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/x86_64/locore.S b/x86_64/locore.S
> index f0d1298d..2db0d49b 100644
> --- a/x86_64/locore.S
> +++ b/x86_64/locore.S
> @@ -692,13 +692,14 @@ _kret_iret:
> trap_from_kernel:
> #if MACH_KDB || MACH_TTD
> movq %rsp,%rbx /* save current stack */
> -
> movq %rsp,%rdx /* on an interrupt stack? */
> +
> + CPU_NUMBER(%ecx)
> and $(~(INTSTACK_SIZE-1)),%rdx
> - cmpq EXT(int_stack_base),%rdx
> + cmpq CX(EXT(int_stack_base),%ecx),%rdx
> je 1f /* OK if so */
>
> - CPU_NUMBER(%edx) /* get CPU number */
> + movl %ecx,%edx
> cmpq CX(EXT(kernel_stack),%rdx),%rsp
> /* already on kernel stack? */
> ja 0f
> @@ -824,9 +825,10 @@ ENTRY(all_intrs)
>
> PUSH_SEGMENTS_ISR(%rdx) /* save segment registers */
>
> + CPU_NUMBER_NO_GS(%ecx)
> movq %rsp,%rdx /* on an interrupt stack? */
> and $(~(INTSTACK_SIZE-1)),%rdx
> - cmpq %ss:EXT(int_stack_base),%rdx
> + cmpq %ss:CX(EXT(int_stack_base),%ecx),%rdx
> je int_from_intstack /* if not: */
>
> SET_KERNEL_SEGMENTS(%rdx) /* switch to kernel segments */
> @@ -885,7 +887,8 @@ LEXT(return_to_iret) /* to find the
> return from calling interrupt) */
> iretq /* return to caller */
>
> int_from_intstack:
> - cmpq EXT(int_stack_base),%rsp /* seemingly looping? */
> + CPU_NUMBER_NO_GS(%edx)
> + cmpq CX(EXT(int_stack_base),%edx),%rsp /* seemingly looping? */
> jb stack_overflowed /* if not: */
> call EXT(interrupt) /* call interrupt routine */
> _return_to_iret_i: /* ( label for kdb_kintr) */
> --
> 2.40.1
>
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.