uint64_t val;
if (idx < 0)
- return idx;
+ return idx == -ENODATA ? 0 : idx;
buf = elf_get_section_header(elf, idx);
off = (const uint8_t *)buf - elf->memory;
err = kmod_elf_get_section(elf, ".modinfo", &buf, &size);
if (err < 0)
- return err;
+ return err == -ENODATA ? 0 : err;
strings = buf;
if (strings == NULL || size == 0)
return 0;
if (flags & KMOD_INSERT_FORCE_MODVERSION) {
err = elf_strip_versions_section(elf, changed);
- if (err < 0)
+ if (err < 0) {
+ errno = -err;
goto fail;
+ }
}
if (flags & KMOD_INSERT_FORCE_VERMAGIC) {
err = elf_strip_vermagic(elf, changed);
- if (err < 0)
+ if (err < 0) {
+ errno = -err;
goto fail;
+ }
}
return changed;
stripped = kmod_elf_strip(elf, flags);
if (stripped == NULL) {
- INFO(mod->ctx, "Failed to strip version information: %s\n",
- strerror(errno));
- mem = kmod_elf_get_memory(elf);
- } else {
- mem = stripped;
+ ERR(mod->ctx, "Failed to strip version information: %s\n",
+ strerror(errno));
+ return -errno;
}
+ mem = stripped;
} else {
err = kmod_file_load_contents(mod->file);
if (err)