core, diskstart: add more sanity checks for handover info
authorH. Peter Anvin <hpa@zytor.com>
Tue, 14 Dec 2010 17:53:42 +0000 (09:53 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 14 Dec 2010 17:53:42 +0000 (09:53 -0800)
In particular, somehow we failed to actually test for DS:SI = 0:0!
This tests both for SI < 16 and DS:SI < 1024.  The former of those
tests is a bit iffy and probably should be removed.

This should also be promoted into isohdpfx.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
core/diskstart.inc

index c0301d4..3fc20e2 100644 (file)
@@ -180,8 +180,11 @@ harddisk:
                mov dx,[di-76-10]       ; Original DS
                mov si,[di-76-12]       ; Original SI
                shr si,4
+               jz .no_partition        ; SI == 0 -> assume no partition
                add dx,si
-               cmp dx,PartInfo >> 4
+               cmp dx,1024             ; DS:SI < 1K (inside the IVT)?
+               jb .no_partition
+               cmp dx,PartInfo >> 4    ; DS:SI in overwritten memory?
                jae .no_partition
                test byte [di-76],7Fh   ; Sanity check: "active flag" should
                jnz .no_partition       ; be 00 or 80