From d8402d0e3919ff5318c4bbad690be32bf715936e Mon Sep 17 00:00:00 2001 From: Gene Cumm Date: Fri, 5 Nov 2010 13:32:52 -0400 Subject: [PATCH] PXELINUX: Fix timer bug Certain calls to the PXE stack could potentially remove us from memory. Revert the INT 1Ch timer to its previous state. --- core/pxelinux.asm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/pxelinux.asm b/core/pxelinux.asm index a46b3da..165472d 100644 --- a/core/pxelinux.asm +++ b/core/pxelinux.asm @@ -365,6 +365,15 @@ pxenv: pushfd pushad + ; We may be removing ourselves from memory + cmp bx,0073h + jz .disable_timer + jmp .store_stack + +.disable_timer: + call timer_cleanup + +.store_stack: mov [cs:PXEStack],sp mov [cs:PXEStack+2],ss lss sp,[cs:InitStack] @@ -391,6 +400,16 @@ pxenv: ; This clobbers the AX return, but we already saved it into ; the PXEStatus variable. popad + + ; If the TFTP failed, it could return. + cmp bx,0073h + jz .enable_timer + jmp .pop_flags + +.enable_timer: + call timer_init + +.pop_flags: popfd ; Restore flags (incl. IF, DF) ret -- 2.7.4