From 811b173387858df9b2bdb02f03af5f0c0ea5d0f7 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Fri, 17 May 2024 23:24:04 +0200 Subject: [PATCH] Re-enable interrupts only if they were enabled previously --- xtoskrnl/ke/sysres.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/xtoskrnl/ke/sysres.c b/xtoskrnl/ke/sysres.c index 30cfd46..c680bbd 100644 --- a/xtoskrnl/ke/sysres.c +++ b/xtoskrnl/ke/sysres.c @@ -168,6 +168,10 @@ KepGetSystemResource(IN SYSTEM_RESOURCE_TYPE ResourceType, { PSYSTEM_RESOURCE_HEADER Resource; PLIST_ENTRY ListEntry; + BOOLEAN Interrupts; + + /* Check if interrupts are enabled */ + Interrupts = ArInterruptsEnabled(); /* Disable interrupts and acquire a spinlock */ ArClearInterruptFlag(); @@ -205,9 +209,13 @@ KepGetSystemResource(IN SYSTEM_RESOURCE_TYPE ResourceType, Resource = NULL; } - /* Release spinlock and enable interrupts */ + /* Release spinlock and re-enable interrupts if necessary */ KeReleaseSpinLock(&KepSystemResourcesLock); - ArSetInterruptFlag(); + if(Interrupts) + { + /* Re-enable interrupts */ + ArSetInterruptFlag(); + } /* Return resource header */ *ResourceHeader = Resource;