summaryrefslogtreecommitdiff
path: root/libre/syslinux/syslinux-6.02-fix-chainloading.patch
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@parabola.nu>2013-10-20 01:08:36 -0200
committerAndré Fabian Silva Delgado <emulatorman@parabola.nu>2013-10-20 01:08:36 -0200
commit47787b394ff68725628be11e109fe385aa4799b1 (patch)
tree18dc1253e1b0814957033715ca37e1a415c81da2 /libre/syslinux/syslinux-6.02-fix-chainloading.patch
parent967e753bc65f3e33269f8fe86e5116eb8cb30b57 (diff)
downloadabslibre-47787b394ff68725628be11e109fe385aa4799b1.tar.gz
abslibre-47787b394ff68725628be11e109fe385aa4799b1.tar.bz2
abslibre-47787b394ff68725628be11e109fe385aa4799b1.zip
syslinux-6.02-3: updating version
Diffstat (limited to 'libre/syslinux/syslinux-6.02-fix-chainloading.patch')
-rw-r--r--libre/syslinux/syslinux-6.02-fix-chainloading.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/libre/syslinux/syslinux-6.02-fix-chainloading.patch b/libre/syslinux/syslinux-6.02-fix-chainloading.patch
new file mode 100644
index 000000000..6fd7ef4a8
--- /dev/null
+++ b/libre/syslinux/syslinux-6.02-fix-chainloading.patch
@@ -0,0 +1,47 @@
+Reported-by: Dark Raven <drdarkraven at gmail.com>
+Signed-off-by: Raphael S. Carvalho <raphael.scarv at gmail.com>
+---
+ com32/lib/syslinux/disk.c | 22 ++++++++++++++--------
+ 1 files changed, 14 insertions(+), 8 deletions(-)
+
+diff --git a/com32/lib/syslinux/disk.c b/com32/lib/syslinux/disk.c
+index 0b0c737..47ecb52 100644
+--- a/com32/lib/syslinux/disk.c
++++ b/com32/lib/syslinux/disk.c
+@@ -171,22 +171,28 @@ out:
+ static void *ebios_setup(const struct disk_info *const diskinfo, com32sys_t *inreg,
+ uint64_t lba, uint8_t count, uint8_t op_code)
+ {
+- static __lowmem struct disk_ebios_dapa dapa;
++ static struct disk_ebios_dapa *dapa = NULL;
+ void *buf;
+
++ if (!dapa) {
++ dapa = lmalloc(sizeof *dapa);
++ if (!dapa)
++ return NULL;
++ }
++
+ buf = lmalloc(count * diskinfo->bps);
+ if (!buf)
+ return NULL;
+
+- dapa.len = sizeof(dapa);
+- dapa.count = count;
+- dapa.off = OFFS(buf);
+- dapa.seg = SEG(buf);
+- dapa.lba = lba;
++ dapa->len = sizeof(*dapa);
++ dapa->count = count;
++ dapa->off = OFFS(buf);
++ dapa->seg = SEG(buf);
++ dapa->lba = lba;
+
+ inreg->eax.b[1] = op_code;
+- inreg->esi.w[0] = OFFS(&dapa);
+- inreg->ds = SEG(&dapa);
++ inreg->esi.w[0] = OFFS(dapa);
++ inreg->ds = SEG(dapa);
+ inreg->edx.b[0] = diskinfo->disk;
+
+ return buf;