2000-10-28  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-load.c (open_verify): Only try to load ET_DYN and ET_EXEC
	objects.  Reject all other types.
	(_dl_map_object_from_fd): Optimize a bit.
This commit is contained in:
Ulrich Drepper 2000-10-28 09:16:32 +00:00
parent 9ffec5b234
commit 9987236eb1
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2000-10-28 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (open_verify): Only try to load ET_DYN and ET_EXEC
objects. Reject all other types.
(_dl_map_object_from_fd): Optimize a bit.
2000-10-27 Ulrich Drepper <drepper@redhat.com> 2000-10-27 Ulrich Drepper <drepper@redhat.com>
* stdio-common/Makefile (tests): Add tst-fseek. * stdio-common/Makefile (tests): Add tst-fseek.

View File

@ -902,7 +902,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
/* Length of the sections to be loaded. */ /* Length of the sections to be loaded. */
maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart; maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart;
if (type == ET_DYN || type == ET_REL) if (__builtin_expect (type, ET_DYN) == ET_DYN)
{ {
/* This is a position-independent shared object. We can let the /* This is a position-independent shared object. We can let the
kernel map it anywhere it likes, but we must have space for all kernel map it anywhere it likes, but we must have space for all
@ -1279,10 +1279,10 @@ open_verify (const char *name, struct filebuf *fbp)
/* XXX We should be able so set system specific versions which are /* XXX We should be able so set system specific versions which are
allowed here. */ allowed here. */
if (!VALID_ELF_OSABI (ehdr->e_ident[EI_OSABI])) if (!VALID_ELF_OSABI (ehdr->e_ident[EI_OSABI]))
lose (0, fd, name, NULL, NULL, N_("ELF file OS ABI invalid.")); lose (0, fd, name, NULL, NULL, N_("ELF file OS ABI invalid"));
if (!VALID_ELF_ABIVERSION (ehdr->e_ident[EI_ABIVERSION])) if (!VALID_ELF_ABIVERSION (ehdr->e_ident[EI_ABIVERSION]))
lose (0, fd, name, NULL, NULL, lose (0, fd, name, NULL, NULL,
N_("ELF file ABI version invalid.")); N_("ELF file ABI version invalid"));
lose (0, fd, name, NULL, NULL, N_("internal error")); lose (0, fd, name, NULL, NULL, N_("internal error"));
} }
@ -1300,6 +1300,10 @@ open_verify (const char *name, struct filebuf *fbp)
!= sizeof (ElfW(Phdr))) != sizeof (ElfW(Phdr)))
lose (0, fd, name, NULL, NULL, lose (0, fd, name, NULL, NULL,
N_("ELF file's phentsize not the expected size")); N_("ELF file's phentsize not the expected size"));
else if (__builtin_expect (ehdr->e_type, ET_DYN) != ET_DYN
&& __builtin_expect (ehdr->e_type, ET_EXEC) != ET_EXEC)
lose (0, fd, name, NULL, NULL,
N_("only ET_DYN and ET_EXEC can be loaded"));
} }
return fd; return fd;