Merge "Downgrade W+E load segments to a warning unless targeting O."
This commit is contained in:
commit
8945d5e43a
|
@ -218,6 +218,6 @@ $ readelf --program-headers -W libBadFlags.so | grep WE
|
|||
LOAD 0x000000 0x00000000 0x00000000 0x4c01d 0x4c01d RWE 0x1000
|
||||
```
|
||||
|
||||
*Resolution*: right now we're not actually sure where these are coming
|
||||
from, so if you find and fix these in your app, please let us know how
|
||||
they snuck in!
|
||||
*Resolution*: we're aware of one middleware product that introduces these
|
||||
into your app. The middleware vendor is aware of the problem and has a fix
|
||||
available.
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include "linker.h"
|
||||
#include "linker_dlwarning.h"
|
||||
#include "linker_globals.h"
|
||||
#include "linker_debug.h"
|
||||
#include "linker_utils.h"
|
||||
|
@ -605,10 +606,14 @@ bool ElfReader::LoadSegments() {
|
|||
|
||||
if (file_length != 0) {
|
||||
int prot = PFLAGS_TO_PROT(phdr->p_flags);
|
||||
// W + E PT_LOAD segments are not allowed.
|
||||
if ((prot & (PROT_EXEC | PROT_WRITE)) == (PROT_EXEC | PROT_WRITE)) {
|
||||
DL_ERR_AND_LOG("\"%s\": W + E load segments are not allowed", name_.c_str());
|
||||
return false;
|
||||
// W + E PT_LOAD segments are not allowed in O.
|
||||
if (get_application_target_sdk_version() > 25) {
|
||||
DL_ERR_AND_LOG("\"%s\": W + E load segments are not allowed", name_.c_str());
|
||||
return false;
|
||||
}
|
||||
DL_WARN("\"%s\": W + E load segments are not allowed", name_.c_str());
|
||||
add_dlwarning(name_.c_str(), "W+E load segments");
|
||||
}
|
||||
|
||||
void* seg_addr = mmap64(reinterpret_cast<void*>(seg_page_start),
|
||||
|
|
Loading…
Reference in New Issue