< 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,14 +1023,21 @@
   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,10 +1079,14 @@
 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 >