aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--com32/lib/Makefile4
-rw-r--r--com32/lib/sys/module/common.c46
2 files changed, 27 insertions, 23 deletions
diff --git a/com32/lib/Makefile b/com32/lib/Makefile
index 7bedc22e..d979ab43 100644
--- a/com32/lib/Makefile
+++ b/com32/lib/Makefile
@@ -60,7 +60,7 @@ LIBLOAD_OBJS = \
syslinux/run_default.o syslinux/run_command.o \
syslinux/cleanup.o syslinux/localboot.o syslinux/runimage.o \
\
- syslinux/loadfile.o syslinux/zloadfile.o \
+ syslinux/loadfile.o syslinux/floadfile.o syslinux/zloadfile.o \
\
syslinux/load_linux.o syslinux/initramfs.o \
syslinux/initramfs_file.o syslinux/initramfs_loadfile.o \
@@ -81,10 +81,10 @@ LIBENTRY_OBJS = \
dprintf.o vdprintf.o \
\
syslinux/idle.o \
+ \
exit.o
LIBMODULE_OBJS = \
- syslinux/floadfile.o \
sys/module/common.o sys/module/elf_module.o \
sys/module/elfutils.o \
sys/module/exec.o
diff --git a/com32/lib/sys/module/common.c b/com32/lib/sys/module/common.c
index 1daa533e..7625ab77 100644
--- a/com32/lib/sys/module/common.c
+++ b/com32/lib/sys/module/common.c
@@ -110,8 +110,8 @@ again:
int image_load(struct elf_module *module)
{
void *zdata, *mdata;
- size_t zlen, mlen;
- const struct slzm_header *hdr;
+ size_t mlen;
+ struct slzm_header hdr;
FILE *f;
int zr;
int rv = -1;
@@ -124,34 +124,39 @@ int image_load(struct elf_module *module)
f = findpath(module->name);
if (!f) {
- DBG_PRINT("Could not open module file '%s'\n", module->name);
+ dprintf("%s: could not open module file\n", module->name);
goto error;
}
- if (floadfile(f, &zdata, &zlen, NULL, 0)) {
- DBG_PRINT("Could not read module file '%s'\n", module->name);
+ if (_fread(&hdr, sizeof hdr, f) != sizeof hdr) {
+ dprintf("%s: could not read module header\n",
+ module->name);
goto error;
}
- fclose(f);
- f = NULL;
-
- hdr = zdata;
- if (zlen < sizeof *hdr) {
- dprintf("%s: file too short\n", module->name);
+ if (hdr.magic[0] != SLZM_MAGIC1 || hdr.magic[1] != SLZM_MAGIC2 ||
+ hdr.platform != SLZM_PLATFORM || hdr.arch != SLZM_ARCH) {
+ dprintf("%s: bad header\n", module->name);
goto error;
}
- zlen -= sizeof *hdr;
+ zdata = malloc(hdr.zsize);
+ if (!zdata) {
+ dprintf("%s: failed to allocate zdata buffer\n",
+ module->name);
+ goto error;
+ }
- if (hdr->magic[0] != SLZM_MAGIC1 || hdr->magic[1] != SLZM_MAGIC2 ||
- hdr->platform != SLZM_PLATFORM || hdr->arch != SLZM_ARCH ||
- zlen < hdr->zsize) {
- dprintf("%s: bad header\n", module->name);
+ if (_fread(zdata, hdr.zsize, f) != hdr.zsize) {
+ dprintf("%s: failed to read module data\n",
+ module->name);
goto error;
}
- mlen = hdr->usize + 15;
+ fclose(f);
+ f = NULL;
+
+ mlen = hdr.usize + 15;
mdata = malloc(mlen);
if (!mdata) {
dprintf("%s: failed to allocate mdata buffer\n",
@@ -159,17 +164,16 @@ int image_load(struct elf_module *module)
goto error;
}
- zr = lzo1x_decompress_fast_safe((const char *)zdata + sizeof *hdr,
- hdr->zsize, mdata, &mlen, NULL);
+ zr = lzo1x_decompress_fast_safe(zdata, hdr.zsize, mdata, &mlen, NULL);
if (zr) {
dprintf("%s: decompression returned error %d\n",
module->name, zr);
goto error;
}
- if (mlen != hdr->usize) {
+ if (mlen != hdr.usize) {
dprintf("%s: decompression returned %zu bytes expected %u\n",
- module->name, mlen, hdr->usize);
+ module->name, mlen, hdr.usize);
goto error;
}