diff options
author | H. Peter Anvin <hpa@zytor.com> | 2014-07-29 08:47:32 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2014-07-29 08:52:21 -0700 |
commit | a7f5892c4d85f3685708b8efb237c9c73a8b1ddf (patch) | |
tree | 2db79d4db967052e587e5017be3ace9b0083e973 | |
parent | 3741886cb700e1017d70f1753f013fa10f4d9272 (diff) | |
download | syslinux-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.asm | 4 |
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 |