Add check for executable stack/heap when rating Linux exploitability.
This CL also consequentially adds a public method to get the number of mappings in a Linux minidump. R=ivanpe@chromium.org Review URL: https://codereview.chromium.org/1291603002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1488 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
@@ -124,7 +124,8 @@ ExploitabilityRating ExploitabilityLinux::CheckPlatformExploitability() {
|
||||
|
||||
// Checking for the instruction pointer in a valid instruction region.
|
||||
if (!this->InstructionPointerInCode(instruction_ptr) ||
|
||||
this->StackPointerOffStack(stack_ptr)) {
|
||||
this->StackPointerOffStack(stack_ptr) ||
|
||||
this->ExecutableStackOrHeap()) {
|
||||
return EXPLOITABILITY_HIGH;
|
||||
}
|
||||
|
||||
@@ -149,6 +150,24 @@ bool ExploitabilityLinux::StackPointerOffStack(uint64_t stack_ptr) {
|
||||
linux_maps->GetPathname().compare("[stack]"));
|
||||
}
|
||||
|
||||
bool ExploitabilityLinux::ExecutableStackOrHeap() {
|
||||
MinidumpLinuxMapsList *linux_maps_list = dump_->GetLinuxMapsList();
|
||||
if (linux_maps_list) {
|
||||
for (size_t i = 0; i < linux_maps_list->get_maps_count(); i++) {
|
||||
const MinidumpLinuxMaps *linux_maps =
|
||||
linux_maps_list->GetLinuxMapsAtIndex(i);
|
||||
// Check for executable stack or heap for each mapping.
|
||||
if (linux_maps &&
|
||||
(!linux_maps->GetPathname().compare("[stack]") ||
|
||||
!linux_maps->GetPathname().compare("[heap]")) &&
|
||||
linux_maps->IsExecutable()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ExploitabilityLinux::InstructionPointerInCode(uint64_t instruction_ptr) {
|
||||
// Get Linux memory mapping from /proc/self/maps. Checking whether the
|
||||
// region the instruction pointer is in has executable permission can tell
|
||||
|
||||
Reference in New Issue
Block a user