Hi!
> Changes in src/sys/lib/libsa:
> cvs rdiff -r1.2 -r1.3 src/sys/lib/libsa/loadfile.c
> cvs rdiff -r1.3 -r1.4 src/sys/lib/libsa/loadfile_elf.c
> Log message:
> more strict elf header checking to prevent wrong arch kernels being booted
> and producing confusing errors
I presume that it was kind of mistyping as no one is currently
checking 64-bit builds since has more important tasks.
elf32 field of union hdr will never defined on 64bit builds.
Right fix should be:
===================================================================
RCS file: /data/anoncvs/AerieBSD/src/sys/lib/libsa/loadfile.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- src/sys/lib/libsa/loadfile.c 2008/12/26 18:51:51 1.2
+++ src/sys/lib/libsa/loadfile.c 2009/12/10 12:15:12 1.3
@@ -149,12 +149,14 @@
#endif
#if defined(BOOT_ELF32) || (defined(BOOT_ELF) && ELFSIZE == 32)
if (memcmp(hdr.elf32.e_ident, ELFMAG, SELFMAG) == 0 &&
+ hdr.elf32.e_ident[EI_DATA] == ELF_TARG_DATA &&
hdr.elf32.e_ident[EI_CLASS] == ELFCLASS32) {
rval = elf32_exec(fd, &hdr.elf32, marks, flags);
} else
#endif
#if defined(BOOT_ELF64) || (defined(BOOT_ELF) && ELFSIZE == 64)
if (memcmp(hdr.elf64.e_ident, ELFMAG, SELFMAG) == 0 &&
+ hdr.elf64.e_ident[EI_DATA] == ELF_TARG_DATA &&
hdr.elf64.e_ident[EI_CLASS] == ELFCLASS64) {
rval = elf64_exec(fd, &hdr.elf64, marks, flags);
} else