On Tue, Feb 09, 2010 at 12:24:24PM +0300, Held Bier wrote:
> 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.

oh that part of the header actually is the same layout on 32 or 64
bits so it just works. just a cut&paste thingie (:
but 10x anyway

> 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

-- 
    paranoic mickey       (my employers have changed but, the name has remained)

Reply via email to