diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | elf/dl-load.c | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ldsodefs.h | 22 |
3 files changed, 32 insertions, 2 deletions
@@ -1,3 +1,11 @@ +2009-02-10 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-load.c (open_verify): In case VALID_ELF_HEADER is + defined, allow additional data to be added using the optional + MORE_ELF_HEADER_DATA macro. + * sysdeps/unix/sysv/linux/ldsodefs.h (VALID_ELF_HEADER, + VALID_ELF_OSABI, VALID_ELF_ABIVERSION, MORE_ELF_HEADER_DATA): Define. + 2009-02-08 Ulrich Drepper <drepper@redhat.com> * include/atomic.h: Define catomic_and if not already defined. diff --git a/elf/dl-load.c b/elf/dl-load.c index 8a8936f7bd..c77c259156 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1,5 +1,5 @@ /* Map in a shared object's segments from the file. - Copyright (C) 1995-2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1995-2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -1574,6 +1574,8 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader, # define VALID_ELF_HEADER(hdr,exp,size) (memcmp (hdr, exp, size) == 0) # define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV) # define VALID_ELF_ABIVERSION(ver) (ver == 0) +#elif defined MORE_ELF_HEADER_DATA + MORE_ELF_HEADER_DATA; #endif static const unsigned char expected[EI_PAD] = { diff --git a/sysdeps/unix/sysv/linux/ldsodefs.h b/sysdeps/unix/sysv/linux/ldsodefs.h index 0bdca3c3fd..0965f1496f 100644 --- a/sysdeps/unix/sysv/linux/ldsodefs.h +++ b/sysdeps/unix/sysv/linux/ldsodefs.h @@ -1,5 +1,5 @@ /* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2006, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -53,4 +53,24 @@ extern void _dl_non_dynamic_init (void) internal_function; # define HAVE_AUX_PAGESIZE #endif +/* Accept binaries which identify the binary as using Linux extensions. */ +#define VALID_ELF_HEADER(hdr,exp,size) (memcmp (hdr, exp, size) == 0 \ + || memcmp (hdr, expected2, size) == 0) +#define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV \ + || osabi == ELFOSABI_LINUX) +#define VALID_ELF_ABIVERSION(ver) (ver == 0) +#define MORE_ELF_HEADER_DATA \ + static const unsigned char expected2[EI_PAD] = \ + { \ + [EI_MAG0] = ELFMAG0, \ + [EI_MAG1] = ELFMAG1, \ + [EI_MAG2] = ELFMAG2, \ + [EI_MAG3] = ELFMAG3, \ + [EI_CLASS] = ELFW(CLASS), \ + [EI_DATA] = byteorder, \ + [EI_VERSION] = EV_CURRENT, \ + [EI_OSABI] = ELFOSABI_LINUX, \ + [EI_ABIVERSION] = 0 \ + } + #endif /* ldsodefs.h */ |