summaryrefslogtreecommitdiff
path: root/libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch
diff options
context:
space:
mode:
authorOmar Vega Ramos <ovruni@gnu.org.pe>2018-09-04 11:47:31 -0500
committerOmar Vega Ramos <ovruni@gnu.org.pe>2018-09-04 11:47:31 -0500
commitdaab1372185ead237c61cf92ecc76514acd58fd9 (patch)
treeeae4a8a3eb3ed46b9cbe25a69b963486ef7714fe /libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch
parent332dd3f896914a6380d670c55f79d818879b7bce (diff)
downloadabslibre-daab1372185ead237c61cf92ecc76514acd58fd9.tar.gz
abslibre-daab1372185ead237c61cf92ecc76514acd58fd9.tar.bz2
abslibre-daab1372185ead237c61cf92ecc76514acd58fd9.zip
libre-testing/syslinux-6.03-11.parabola1: rebuild
Diffstat (limited to 'libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch')
-rw-r--r--libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch b/libre-testing/syslinux/syslinux-6.02-fix-chainloading.patch
new file mode 100644
index 000000000..6fd7ef4a8
--- /dev/null
+++ b/libre-testing/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;