aboutsummaryrefslogtreecommitdiffstats
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
parent38e1c74db64e02152e525c2d5c135cb5793d847e (diff)
downloadsyslinux-elf-18ca4d8cc87761c6a5ab763069fad562fec69b59.tar.gz
syslinux-elf-18ca4d8cc87761c6a5ab763069fad562fec69b59.tar.xz
syslinux-elf-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>
-rw-r--r--NEWS4
-rw-r--r--core/bootsect.inc13
-rw-r--r--version2
3 files changed, 16 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 5a18525b..2ab59465 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ Starting with 1.47, changes marked with SYSLINUX, PXELINUX, ISOLINUX
or EXTLINUX apply to that specific program only; other changes apply
to all derivatives.
+Changes in 3.83:
+ * PXELINUX: clear memory before handing over to a chainloaded
+ NBP. This may help avoid a bug in Windows RIS.
+
Changes in 3.82:
* isohybrid: fix the -partok logic for loading from a partition.
* ISOLINUX: deal with systems which return from INT 13h with
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
;
diff --git a/version b/version
index 2fc94187..f2649fb3 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-3.82 2009
+3.83 2009