From: Ulrich Drepper Date: Tue, 10 Aug 1999 05:13:48 +0000 (+0000) Subject: (_dl_map_object_from_fd): Use VALID_ELF_HEADER, X-Git-Tag: cvs/glibc_2-1-2~163 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ef45101163766516e240d63e98ba3fa7ce47aeef;p=thirdparty%2Fglibc.git (_dl_map_object_from_fd): Use VALID_ELF_HEADER, VALID_ELF_OSABI, VALID_ELF_ABIVERSION to decide whether an object's header and ABI values are acceptable. (VALID_ELF_HEADER): New macro; provide default definition. (VALID_ELF_OSABI): New macro; provide default definition. (VALID_ELF_ABIVERSION): New macro; provide default definition. --- diff --git a/elf/dl-load.c b/elf/dl-load.c index a0448e9091d..9be151646c6 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -655,6 +655,11 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname, /* This is the expected ELF header. */ #define ELF32_CLASS ELFCLASS32 #define ELF64_CLASS ELFCLASS64 +#if !defined VALID_ELF_HEADER +# 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) +#endif static const unsigned char expected[EI_PAD] = { [EI_MAG0] = ELFMAG0, @@ -721,7 +726,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname, header = (void *) readbuf; /* Check the header for basic validity. */ - if (memcmp (header->e_ident, expected, EI_PAD) != 0) + if (!VALID_ELF_HEADER(header->e_ident, expected, EI_PAD)) { /* Something is wrong. */ if (*(Elf32_Word *) &header->e_ident != @@ -746,10 +751,10 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname, LOSE (0, "ELF file version ident not " STRING(EV_CURRENT)); /* XXX We should be able so set system specific versions which are allowed here. */ - if (header->e_ident[EI_OSABI] != ELFOSABI_SYSV) - LOSE (0, "ELF file OS ABI not " STRING(ELFOSABI_SYSV)); - if (header->e_ident[EI_ABIVERSION] != 0) - LOSE (0, "ELF file ABI version not 0"); + if (!VALID_ELF_OSABI(header->e_ident[EI_OSABI])) + LOSE (0, "ELF file OS ABI invalid."); + if (!VALID_ELF_ABIVERSION(header->e_ident[EI_ABIVERSION])) + LOSE (0, "ELF file ABI version invalid."); LOSE (0, "internal error"); }