aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2010-12-14 09:53:42 -0800
committerH. Peter Anvin <hpa@zytor.com>2010-12-14 09:53:42 -0800
commit56c070e477c96d964ed7beab216b113dac8de0ef (patch)
treec947a220973e3613df7c0316bf89b898d1540388
parenta8512b9931261ef9d837c69dfd9a3bf0ffc9a469 (diff)
downloadsyslinux-56c070e477c96d964ed7beab216b113dac8de0ef.tar.gz
syslinux-56c070e477c96d964ed7beab216b113dac8de0ef.tar.xz
syslinux-56c070e477c96d964ed7beab216b113dac8de0ef.zip
core, diskstart: add more sanity checks for handover info
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>
-rw-r--r--core/diskstart.inc5
1 files changed, 4 insertions, 1 deletions
diff --git a/core/diskstart.inc b/core/diskstart.inc
index c0301d4b..3fc20e2b 100644
--- a/core/diskstart.inc
+++ b/core/diskstart.inc
@@ -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