OpenJDK / graal / graal-jvmci-8
changeset 24367:1eaa9a72d705
8180813: Null pointer dereference of CodeCache::find_blob() result
Summary: Fixed missing null checks on the result of CodeCache::find_blob() found by Parfait.
Reviewed-by: shade, kvn
author | thartmann |
---|---|
date | Wed, 24 May 2017 16:53:58 +0200 |
parents | 5c6e2c667464 |
children | 3c3a934f88c2 |
files | src/share/vm/code/relocInfo.cpp src/share/vm/runtime/sharedRuntime.cpp |
diffstat | 2 files changed, 5 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/code/relocInfo.cpp Mon May 22 09:23:59 2017 +0200 +++ b/src/share/vm/code/relocInfo.cpp Wed May 24 16:53:58 2017 +0200 @@ -128,9 +128,9 @@ if (nm == NULL && begin != NULL) { // allow nmethod to be deduced from beginning address CodeBlob* cb = CodeCache::find_blob(begin); - nm = cb->as_nmethod_or_null(); + nm = (cb != NULL) ? cb->as_nmethod_or_null() : NULL; } - assert(nm != NULL, "must be able to deduce nmethod from other arguments"); + guarantee(nm != NULL, "must be able to deduce nmethod from other arguments"); _code = nm; _current = nm->relocation_begin() - 1;
--- a/src/share/vm/runtime/sharedRuntime.cpp Mon May 22 09:23:59 2017 +0200 +++ b/src/share/vm/runtime/sharedRuntime.cpp Wed May 24 16:53:58 2017 +0200 @@ -546,7 +546,7 @@ CodeBlob *cb = CodeCache::find_blob(pc); // Should be an nmethod - assert( cb && cb->is_nmethod(), "safepoint polling: pc must refer to an nmethod" ); + guarantee(cb != NULL && cb->is_nmethod(), "safepoint polling: pc must refer to an nmethod"); // Look up the relocation information assert( ((nmethod*)cb)->is_at_poll_or_poll_return(pc), @@ -1709,7 +1709,7 @@ // ask me how I know this... CodeBlob* cb = CodeCache::find_blob(caller_pc); - if (!cb->is_nmethod() || entry_point == moop->get_c2i_entry()) { + if (cb == NULL || !cb->is_nmethod() || entry_point == moop->get_c2i_entry()) { return; } @@ -1760,7 +1760,7 @@ if (destination != entry_point) { CodeBlob* callee = CodeCache::find_blob(destination); // callee == cb seems weird. It means calling interpreter thru stub. - if (callee == cb || callee->is_adapter_blob()) { + if (callee != NULL && (callee == cb || callee->is_adapter_blob())) { // static call or optimized virtual if (TraceCallFixup) { tty->print("fixup callsite at " INTPTR_FORMAT " to compiled code for", caller_pc);