diff options
author | Gene Cumm <gene.cumm@gmail.com> | 2010-11-05 13:32:52 -0400 |
---|---|---|
committer | Gene Cumm <gene.cumm@gmail.com> | 2010-11-05 13:32:52 -0400 |
commit | d8402d0e3919ff5318c4bbad690be32bf715936e (patch) | |
tree | 9d5752427aaaa09f9e3538050f4542428181fbf9 /core | |
parent | 778fcea7d4e3e2a595df0a18475d83d008216117 (diff) | |
download | syslinux-d8402d0e3919ff5318c4bbad690be32bf715936e.tar.gz |
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.
Diffstat (limited to 'core')
-rw-r--r-- | core/pxelinux.asm | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/core/pxelinux.asm b/core/pxelinux.asm index a46b3da5..165472d3 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 |