summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2007-01-09 03:52:28 +0100
committerMichael Brown2007-01-09 03:52:28 +0100
commita2be828a338c28695e20c11bc92260866b3fb47d (patch)
tree21b613e5b55327c30954c1c9057b1afe5dbc007f
parentSince we now always unload the base code stack (even if we keep UNDI), (diff)
downloadipxe-a2be828a338c28695e20c11bc92260866b3fb47d.tar.gz
ipxe-a2be828a338c28695e20c11bc92260866b3fb47d.tar.xz
ipxe-a2be828a338c28695e20c11bc92260866b3fb47d.zip
Avoid leaving preloaded_undi with invalid PXENV+/!PXE structure
addresses if the signature checks fail.
-rw-r--r--src/arch/i386/prefix/pxeprefix.S18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/arch/i386/prefix/pxeprefix.S b/src/arch/i386/prefix/pxeprefix.S
index 5bfd58f4..55a228ff 100644
--- a/src/arch/i386/prefix/pxeprefix.S
+++ b/src/arch/i386/prefix/pxeprefix.S
@@ -48,9 +48,9 @@ detect_pxenv:
/* Signature check */
les pxenv_segoff, %di
cmpl $0x4e455850, %es:(%di) /* 'PXEN' signature */
- jne 99f
+ jne no_pxenv
cmpw $0x2b56, %es:4(%di) /* 'V+' signature */
- jne 99f
+ jne no_pxenv
/* Record entry point and UNDI segments */
pushl %es:0x0a(%di) /* Entry point */
popl entry_segoff
@@ -67,9 +67,15 @@ detect_pxenv:
call print_segoff
movb $',', %al
call print_character
+ jmp 99f
.section ".prefix.data"
10: .asciz " PXENV+ at "
.previous
+
+no_pxenv:
+ xorl %eax, %eax
+ movl %eax, pxenv_segoff
+
99:
/*****************************************************************************
@@ -80,7 +86,7 @@ detect_ppxe:
/* Signature check */
les ppxe_segoff, %di
cmpl $0x45585021, %es:(%di) /* '!PXE' signature */
- jne 99f
+ jne no_ppxe
/* Record structure address, entry point, and UNDI segments */
pushw %es
popw ppxe_segment
@@ -99,9 +105,15 @@ detect_ppxe:
call print_segoff
movb $',', %al
call print_character
+ jmp 99f
.section ".prefix.data"
10: .asciz " !PXE at "
.previous
+
+no_ppxe:
+ xorl %eax, %eax
+ movl %eax, ppxe_segoff
+
99:
/*****************************************************************************