From ef437b30ad574cd760d1db8a9577e3a7d8f50163 Mon Sep 17 00:00:00 2001 From: Michael D Kinney Date: Sat, 11 Jul 2026 09:47:32 -0700 Subject: [PATCH] MdeModulePkg/Core/Dxe: Add interrupt-enable nesting guard Add interrupt-enable recursion depth tracking using mInterruptEnableNestDepth and a bounded assertion in CoreSetInterruptState(). This provides early detection for unintended recursive interrupt-enable loops. Signed-off-by: Michael D Kinney --- MdeModulePkg/Core/Dxe/Event/Tpl.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/MdeModulePkg/Core/Dxe/Event/Tpl.c b/MdeModulePkg/Core/Dxe/Event/Tpl.c index c4768290f4..ea147fee6d 100644 --- a/MdeModulePkg/Core/Dxe/Event/Tpl.c +++ b/MdeModulePkg/Core/Dxe/Event/Tpl.c @@ -9,6 +9,21 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "DxeMain.h" #include "Event.h" +// +// Maximum interrupt nesting depth allowed by the UEFI/PI specifications. +// Comprised of 3 software TPL levels (TPL_APPLICATION, TPL_CALLBACK, +// TPL_NOTIFY) plus 16 hardware interrupt priority levels (TPL 16..31). +// +#define MAX_INTERRUPT_ENABLE_NEST_DEPTH (3 + 16) + +// +// Counter for tracking interrupt enable recursion depth. +// Incremented on entry to CoreSetInterruptState(TRUE) and decremented on exit. +// Prevents stack overflow from infinite interrupt recursion loops. +// Must not exceed MAX_INTERRUPT_ENABLE_NEST_DEPTH per UEFI/PI specs. +// +static volatile UINTN mInterruptEnableNestDepth = 0; + /** Set Interrupt State. @@ -39,7 +54,12 @@ CoreSetInterruptState ( } } + mInterruptEnableNestDepth++; + ASSERT (mInterruptEnableNestDepth < MAX_INTERRUPT_ENABLE_NEST_DEPTH); + gCpu->EnableInterrupt (gCpu); + + mInterruptEnableNestDepth--; } /**