aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-06-14 14:32:42 -0700
committerH. Peter Anvin <hpa@zytor.com>2009-06-14 14:32:42 -0700
commit18ca4d8cc87761c6a5ab763069fad562fec69b59 (patch)
tree0cb9dd50977c230e9e7ef0e0e6274088c13ce613 /core
parent38e1c74db64e02152e525c2d5c135cb5793d847e (diff)
downloadsyslinux.git-18ca4d8cc87761c6a5ab763069fad562fec69b59.tar.gz
syslinux.git-18ca4d8cc87761c6a5ab763069fad562fec69b59.tar.xz
syslinux.git-18ca4d8cc87761c6a5ab763069fad562fec69b59.zip
bootsect: zero memory above a chainloaded boot sector/NBP
Windows RIS has been reported to make inappropriate use of data found in uninitialized memory. To avoid that, clear memory between a chainloaded boot sector or NBP and Free Base Memory. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'core')
-rw-r--r--core/bootsect.inc13
1 files changed, 11 insertions, 2 deletions
diff --git a/core/bootsect.inc b/core/bootsect.inc
index b107eb5c..3ea36bf5 100644
--- a/core/bootsect.inc
+++ b/core/bootsect.inc
@@ -84,11 +84,20 @@ load_bootsec:
;
; replace_bootstrap for the special case where we have exactly one
-; descriptor.
+; descriptor, based in low memory. We will generate a second descriptor
+; to clear remaining FBM.
;
replace_bootstrap_one:
- push word 1 ; Length of descriptor list
+ mov eax,[trackbuf] ; Base address
+ add eax,[trackbuf+8] ; Length
+ movzx edx,word [BIOS_fbm]
+ shl edx,10 ; Free Base Memory
+ sub edx,eax
+ mov [trackbuf+12],eax
+ or dword [trackbuf+16],-1 ; Zero memory
+ mov [trackbuf+20],edx
+ push word 2 ; Length of descriptor list
; Fall through
;