From: cheloha Date: Tue, 27 Jun 2023 10:11:15 +0000 (+0000) Subject: amd64: MCOUNT_EXIT: restore interrupts, don't unconditionally reenable them X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=08cf7c3f88334cf737af7753d1b04496aca85a86;p=openbsd amd64: MCOUNT_EXIT: restore interrupts, don't unconditionally reenable them This bug can cause all sorts of problems, but in particular it was most easily reproduced as a double fault in the syscall return path on this CPU model: Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz Tons of help from guenther@ in narrowing down the root cause. Fix tweaked by guenther@. Additional input from deraadt@ and kettenis@. ok guenther@ --- diff --git a/sys/arch/amd64/include/profile.h b/sys/arch/amd64/include/profile.h index 7f63b92c8f0..cee88380993 100644 --- a/sys/arch/amd64/include/profile.h +++ b/sys/arch/amd64/include/profile.h @@ -1,4 +1,4 @@ -/* $OpenBSD: profile.h,v 1.5 2021/09/04 22:15:33 bluhm Exp $ */ +/* $OpenBSD: profile.h,v 1.6 2023/06/27 10:11:15 cheloha Exp $ */ /* $NetBSD: profile.h,v 1.3 2003/11/28 23:22:45 fvdl Exp $ */ /* @@ -72,6 +72,6 @@ __asm(" .globl __mcount \n" \ #ifdef _KERNEL -#define MCOUNT_ENTER (void)&s; __asm__("cli"); -#define MCOUNT_EXIT __asm__("sti"); +#define MCOUNT_ENTER s = intr_disable() +#define MCOUNT_EXIT intr_restore(s) #endif /* _KERNEL */