# HG changeset patch # User dlong # Date 1517443823 28800 # Node ID e50e326a2bfcb9f246f0ba87dc121a4cca2dd8ea # Parent 23a07b0cf8a6f705091f83be3681e55930a1aab3 8194990: 3 Null pointer dereference defect groups related to CodeCache::find_blob_unsafe() Reviewed-by: kvn diff -r 23a07b0cf8a6 -r e50e326a2bfc src/hotspot/share/code/compiledIC.cpp --- a/src/hotspot/share/code/compiledIC.cpp Wed Jan 31 16:09:52 2018 -0800 +++ b/src/hotspot/share/code/compiledIC.cpp Wed Jan 31 16:10:23 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -417,7 +417,7 @@ bool static_bound = info.is_optimized() || (info.cached_metadata() == NULL); #ifdef ASSERT CodeBlob* cb = CodeCache::find_blob_unsafe(info.entry()); - assert (cb->is_compiled(), "must be compiled!"); + assert (cb != NULL && cb->is_compiled(), "must be compiled!"); #endif /* ASSERT */ // This is MT safe if we come from a clean-cache and go through a diff -r 23a07b0cf8a6 -r e50e326a2bfc src/hotspot/share/code/nmethod.cpp --- a/src/hotspot/share/code/nmethod.cpp Wed Jan 31 16:09:52 2018 -0800 +++ b/src/hotspot/share/code/nmethod.cpp Wed Jan 31 16:10:23 2018 -0800 @@ -955,6 +955,7 @@ CompiledIC *ic = CompiledIC_at(&iter); // Ok, to lookup references to zombies here CodeBlob *cb = CodeCache::find_blob_unsafe(ic->ic_destination()); + assert(cb != NULL, "destination not in CodeBlob?"); nmethod* nm = cb->as_nmethod_or_null(); if( nm != NULL ) { // Verify that inline caches pointing to both zombie and not_entrant methods are clean @@ -967,6 +968,7 @@ case relocInfo::static_call_type: { CompiledStaticCall *csc = compiledStaticCall_at(iter.reloc()); CodeBlob *cb = CodeCache::find_blob_unsafe(csc->destination()); + assert(cb != NULL, "destination not in CodeBlob?"); nmethod* nm = cb->as_nmethod_or_null(); if( nm != NULL ) { // Verify that inline caches pointing to both zombie and not_entrant methods are clean @@ -2732,7 +2734,7 @@ virtual void verify_resolve_call(address dest) const { CodeBlob* db = CodeCache::find_blob_unsafe(dest); - assert(!db->is_adapter_blob(), "must use stub!"); + assert(db != NULL && !db->is_adapter_blob(), "must use stub!"); } virtual bool is_call_to_interpreted(address dest) const {