123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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;
|