From 0f8d2fd7d0c6ff169abed9b07ac63b57d80b8811 Mon Sep 17 00:00:00 2001 From: Egbert Eich Date: Fri, 2 Apr 2004 17:25:21 +0000 Subject: 69. Mark PLT table executable on OSes that don't allow to execute data areas by default (Bugzilla 395, John Dennis). --- hw/xfree86/loader/elfloader.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/xfree86/loader/elfloader.c b/hw/xfree86/loader/elfloader.c index 482ac3f01..9664b33a8 100644 --- a/hw/xfree86/loader/elfloader.c +++ b/hw/xfree86/loader/elfloader.c @@ -1096,6 +1096,18 @@ ELFCreatePLT(ELFModulePtr elffile) ErrorF("ELFCreatePLT() Unable to allocate memory!!!!\n"); return; } +# if defined(linux) || defined(__OpenBSD__) + { + unsigned long page_size = getpagesize(); + unsigned long round; + + round = (unsigned long)elffile->plt & (page_size - 1); + mprotect(elffile->plt - round, + (elffile->pltsize + round + page_size - 1) & ~(page_size - 1), + PROT_READ | PROT_WRITE | PROT_EXEC); + } +# endif + elffile->sections[elffile->pltndx].sh_size = elffile->pltsize; # ifdef ELFDEBUG ELFDEBUG("ELFCreatePLT: PLT address %lx\n", elffile->plt); -- cgit v1.2.3