aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2014-07-29 08:47:32 -0700
committerH. Peter Anvin <hpa@zytor.com>2014-07-29 08:52:21 -0700
commita7f5892c4d85f3685708b8efb237c9c73a8b1ddf (patch)
tree2db79d4db967052e587e5017be3ace9b0083e973
parent3741886cb700e1017d70f1753f013fa10f4d9272 (diff)
downloadsyslinux-a7f5892c4d85f3685708b8efb237c9c73a8b1ddf.tar.gz
syslinux-a7f5892c4d85f3685708b8efb237c9c73a8b1ddf.tar.xz
syslinux-a7f5892c4d85f3685708b8efb237c9c73a8b1ddf.zip
core, pxe: Don't push on one stack and pop from the other in pxenvsyslinux-6.03-pre19
When saving/restoring the flags around the stack switch test, we cannot leave live data on the stack *across* the stack switch that we are going to use on the other side (unlike the "big" stack frame which we only use once we are back on the original stack.) Use register BP, which is not live at either point, as a temporary holding place for the flags from the stack. Reported-by: Frank Mehnert <frank.mehnert@googlemail.com> Link: http://bugzilla.syslinux.org/show_bug.cgi?id=54 Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--core/pxelinux.asm4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/pxelinux.asm b/core/pxelinux.asm
index d4b1a07a..a2543dfe 100644
--- a/core/pxelinux.asm
+++ b/core/pxelinux.asm
@@ -370,9 +370,11 @@ pxenv:
cli
inc word [cs:PXEStackLock]
jnz .skip1
+ pop bp
mov [cs:PXEStack],sp
mov [cs:PXEStack+2],ss
lss sp,[cs:InitStack]
+ push bp
.skip1:
popf
@@ -393,7 +395,9 @@ pxenv:
cli
dec word [cs:PXEStackLock]
jns .skip2
+ pop bp
lss sp,[cs:PXEStack]
+ push bp
.skip2:
popf