diff options
author | Michael Brown | 2007-01-09 03:52:28 +0100 |
---|---|---|
committer | Michael Brown | 2007-01-09 03:52:28 +0100 |
commit | a2be828a338c28695e20c11bc92260866b3fb47d (patch) | |
tree | 21b613e5b55327c30954c1c9057b1afe5dbc007f | |
parent | Since we now always unload the base code stack (even if we keep UNDI), (diff) | |
download | ipxe-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.S | 18 |
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: /***************************************************************************** |