< prev index next >

src/share/vm/prims/whitebox.cpp

Print this page
rev 8887 : 8132980: Improve stability of whitebox methods getCodeBlob and freeCodeBlob
Summary: Added checks for negative and null size and address values (where applicable) for getCodeBlob, allocateCodeBlob and freeCodeBlob, added regression test
Reviewed-by: duke

*** 1023,1036 **** --- 1023,1043 ---- MemoryService::track_code_cache_memory_usage(); return blob; } WB_ENTRY(jlong, WB_AllocateCodeBlob(JNIEnv* env, jobject o, jint size, jint blob_type)) + if (size < 0) { + THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("WB_AllocateCodeBlob: size is negative: " INT32_FORMAT, size)); + } return (jlong) WhiteBox::allocate_code_blob(size, blob_type); WB_END WB_ENTRY(void, WB_FreeCodeBlob(JNIEnv* env, jobject o, jlong addr)) + if (addr == 0) { + return; + } BufferBlob::free((BufferBlob*) addr); WB_END WB_ENTRY(jobjectArray, WB_GetCodeHeapEntries(JNIEnv* env, jobject o, jint blob_type)) ResourceMark rm;
*** 1072,1081 **** --- 1079,1092 ---- WB_ENTRY(jint, WB_GetCompilationActivityMode(JNIEnv* env, jobject o)) return CompileBroker::get_compilation_activity_mode(); WB_END WB_ENTRY(jobjectArray, WB_GetCodeBlob(JNIEnv* env, jobject o, jlong addr)) + if (addr == 0) { + THROW_MSG_NULL(vmSymbols::java_lang_NullPointerException(), + "WB_GetCodeBlob: addr is null"); + } ThreadToNativeFromVM ttn(thread); CodeBlobStub stub((CodeBlob*) addr); return codeBlob2objectArray(thread, env, &stub); WB_END
< prev index next >