(AB): Also check for writable and executable segments.
This commit is contained in:
parent
8dd18431a1
commit
3ca66a2c64
@ -1,5 +1,5 @@
|
|||||||
/* Check for text relocations in DSOs.
|
/* Check for text relocations in DSOs.
|
||||||
Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contribute by Ulrich Drepper <drepper@redhat.com>. 2002.
|
Contribute by Ulrich Drepper <drepper@redhat.com>. 2002.
|
||||||
|
|
||||||
@ -79,20 +79,28 @@ AB(handle_file) (const char *fname, int fd)
|
|||||||
|
|
||||||
/* Search for the PT_DYNAMIC entry. */
|
/* Search for the PT_DYNAMIC entry. */
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
|
E(Phdr) *dynphdr = NULL;
|
||||||
for (cnt = 0; cnt < phnum; ++cnt)
|
for (cnt = 0; cnt < phnum; ++cnt)
|
||||||
if (SWAP (phdr[cnt].p_type) == PT_DYNAMIC)
|
if (SWAP (phdr[cnt].p_type) == PT_DYNAMIC)
|
||||||
break;
|
dynphdr = &phdr[cnt];
|
||||||
|
else if (SWAP (phdr[cnt].p_type) == PT_LOAD
|
||||||
|
&& (SWAP (phdr[cnt].p_flags) & (PF_X | PF_W)) == (PF_X | PF_W))
|
||||||
|
{
|
||||||
|
printf ("%s: segment %zu is executable and writable\n",
|
||||||
|
fname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (cnt == phnum)
|
if (dynphdr == NULL)
|
||||||
{
|
{
|
||||||
printf ("%s: no DYNAMIC segment found\n", fname);
|
printf ("%s: no DYNAMIC segment found\n", fname);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the dynamic segment. */
|
/* Read the dynamic segment. */
|
||||||
size_t pmemsz = SWAP(phdr[cnt].p_memsz);
|
size_t pmemsz = SWAP(dynphdr->p_memsz);
|
||||||
E(Dyn) *dyn = alloca (pmemsz);
|
E(Dyn) *dyn = alloca (pmemsz);
|
||||||
if (pread (fd, dyn, pmemsz, SWAP(phdr[cnt].p_offset)) != pmemsz)
|
if (pread (fd, dyn, pmemsz, SWAP(dynphdr->p_offset)) != pmemsz)
|
||||||
goto read_error;
|
goto read_error;
|
||||||
|
|
||||||
/* Search for an DT_TEXTREL entry of DT_FLAGS with the DF_TEXTREL
|
/* Search for an DT_TEXTREL entry of DT_FLAGS with the DF_TEXTREL
|
||||||
|
Loading…
Reference in New Issue
Block a user