提交 22dc1d9b 编写于 作者: H hseigel

7122219: Passed StringTableSize value not verified

Summary: Check that the values specified for -XX:StringTableSize are within a certain range.
Reviewed-by: dholmes, coleenp
上级 5b90c24d
...@@ -262,19 +262,14 @@ public: ...@@ -262,19 +262,14 @@ public:
// The string table // The string table
static StringTable* the_table() { return _the_table; } static StringTable* the_table() { return _the_table; }
// Size of one bucket in the string table. Used when checking for rollover.
static uint bucket_size() { return sizeof(HashtableBucket<mtSymbol>); }
static void create_table() { static void create_table() {
assert(_the_table == NULL, "One string table allowed."); assert(_the_table == NULL, "One string table allowed.");
_the_table = new StringTable(); _the_table = new StringTable();
} }
static void create_table(HashtableBucket<mtSymbol>* t, int length,
int number_of_entries) {
assert(_the_table == NULL, "One string table allowed.");
assert((size_t)length == StringTableSize * sizeof(HashtableBucket<mtSymbol>),
"bad shared string size.");
_the_table = new StringTable(t, number_of_entries);
}
// GC support // GC support
// Delete pointers to otherwise-unreachable objects. // Delete pointers to otherwise-unreachable objects.
static void unlink(BoolObjectClosure* cl); static void unlink(BoolObjectClosure* cl);
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "precompiled.hpp" #include "precompiled.hpp"
#include "classfile/javaAssertions.hpp" #include "classfile/javaAssertions.hpp"
#include "classfile/symbolTable.hpp"
#include "compiler/compilerOracle.hpp" #include "compiler/compilerOracle.hpp"
#include "memory/allocation.inline.hpp" #include "memory/allocation.inline.hpp"
#include "memory/cardTableRS.hpp" #include "memory/cardTableRS.hpp"
...@@ -1844,6 +1845,11 @@ bool Arguments::check_vm_args_consistency() { ...@@ -1844,6 +1845,11 @@ bool Arguments::check_vm_args_consistency() {
status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio"); status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio"); status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
// Divide by bucket size to prevent a large size from causing rollover when
// calculating amount of memory needed to be allocated for the String table.
status = status && verify_interval(StringTableSize, defaultStringTableSize,
(max_uintx / StringTable::bucket_size()), "StringTable size");
if (MinHeapFreeRatio > MaxHeapFreeRatio) { if (MinHeapFreeRatio > MaxHeapFreeRatio) {
jio_fprintf(defaultStream::error_stream(), jio_fprintf(defaultStream::error_stream(),
"MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or " "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
......
...@@ -3593,7 +3593,7 @@ class CommandLineFlags { ...@@ -3593,7 +3593,7 @@ class CommandLineFlags {
diagnostic(bool, PrintDTraceDOF, false, \ diagnostic(bool, PrintDTraceDOF, false, \
"Print the DTrace DOF passed to the system for JSDT probes") \ "Print the DTrace DOF passed to the system for JSDT probes") \
\ \
product(uintx, StringTableSize, 1009, \ product(uintx, StringTableSize, defaultStringTableSize, \
"Number of buckets in the interned String table") \ "Number of buckets in the interned String table") \
\ \
develop(bool, TraceDefaultMethods, false, \ develop(bool, TraceDefaultMethods, false, \
......
...@@ -576,7 +576,9 @@ void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { ...@@ -576,7 +576,9 @@ void* os::malloc(size_t size, MEMFLAGS memflags, address caller) {
// if NULL is returned the calling functions assume out of memory. // if NULL is returned the calling functions assume out of memory.
size = 1; size = 1;
} }
if (size > size + space_before + space_after) { // Check for rollover.
return NULL;
}
NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap());
u_char* ptr = (u_char*)::malloc(size + space_before + space_after); u_char* ptr = (u_char*)::malloc(size + space_before + space_after);
......
...@@ -327,6 +327,12 @@ typedef jlong s8; ...@@ -327,6 +327,12 @@ typedef jlong s8;
const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134) const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134)
//----------------------------------------------------------------------------------------------------
// Minimum StringTableSize value
const int defaultStringTableSize=1009;
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
// HotSwap - for JVMTI aka Class File Replacement and PopFrame // HotSwap - for JVMTI aka Class File Replacement and PopFrame
// //
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册