From 1cc00e194dd969d30c78775c67a1df44af307abf Mon Sep 17 00:00:00 2001 From: Kenneth J Davis Date: Mon, 19 Aug 2024 16:31:22 -0400 Subject: [PATCH] avoid race condition that could corrupt user stack if DOS re-entered too soon apply suggested fix from SF bug 215 (https://sourceforge.net/p/freedos/bugs/215/), InDOS cleared but small chance DOS re-entered before user stack restored thus corrupting user stack --- kernel/entry.asm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/entry.asm b/kernel/entry.asm index 9f46ff21..47316d62 100644 --- a/kernel/entry.asm +++ b/kernel/entry.asm @@ -406,7 +406,7 @@ int21_normalentry: push bp call _int21_service -int21_exit: dec byte [_InDOS] +int21_exit: %IFDEF WIN31SUPPORT call end_dos_crit_sect ; release all critical sections %if 0 @@ -417,6 +417,10 @@ int21_exit: dec byte [_InDOS] %endif %ENDIF ; WIN31SUPPORT + ; tiny chance DOS re-entered between clearing InDOS and restoring user stack, + ; so we disable interrupts until user stack restored; see SF bug# 215 + cli + dec byte [_InDOS] ; ; Recover registers from system call. Registers and flags ; were modified by the system call.