6885297: java -XX:RefDiscoveryPolicy=2 or -XX:TLABWasteTargetPercent=0 cause VM crash
Interval checking is now being performed on the values passed in for these two flags. The current acceptable range for RefDiscoveryPolicy is [0..1], and for TLABWasteTargetPercent it is [1..100]. Reviewed-by: apetrusenko, ysr
This commit is contained in:
parent
679f958f72
commit
b34027a600
@ -175,6 +175,7 @@ arguments.cpp jvmtiExport.hpp
|
||||
arguments.cpp management.hpp
|
||||
arguments.cpp oop.inline.hpp
|
||||
arguments.cpp os_<os_family>.inline.hpp
|
||||
arguments.cpp referenceProcessor.hpp
|
||||
arguments.cpp universe.inline.hpp
|
||||
arguments.cpp vm_version_<arch>.hpp
|
||||
|
||||
|
@ -263,10 +263,13 @@ class ReferenceProcessor : public CHeapObj {
|
||||
int parallel_gc_threads = 1,
|
||||
bool mt_processing = false,
|
||||
bool discovered_list_needs_barrier = false);
|
||||
|
||||
// RefDiscoveryPolicy values
|
||||
enum {
|
||||
enum DiscoveryPolicy {
|
||||
ReferenceBasedDiscovery = 0,
|
||||
ReferentBasedDiscovery = 1
|
||||
ReferentBasedDiscovery = 1,
|
||||
DiscoveryPolicyMin = ReferenceBasedDiscovery,
|
||||
DiscoveryPolicyMax = ReferentBasedDiscovery
|
||||
};
|
||||
|
||||
static void init_statics();
|
||||
|
@ -1487,6 +1487,20 @@ bool Arguments::created_by_java_launcher() {
|
||||
//===========================================================================================================
|
||||
// Parsing of main arguments
|
||||
|
||||
bool Arguments::verify_interval(uintx val, uintx min,
|
||||
uintx max, const char* name) {
|
||||
// Returns true iff value is in the inclusive interval [min..max]
|
||||
// false, otherwise.
|
||||
if (val >= min && val <= max) {
|
||||
return true;
|
||||
}
|
||||
jio_fprintf(defaultStream::error_stream(),
|
||||
"%s of " UINTX_FORMAT " is invalid; must be between " UINTX_FORMAT
|
||||
" and " UINTX_FORMAT "\n",
|
||||
name, val, min, max);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Arguments::verify_percentage(uintx value, const char* name) {
|
||||
if (value <= 100) {
|
||||
return true;
|
||||
@ -1723,6 +1737,16 @@ bool Arguments::check_vm_args_consistency() {
|
||||
status = false;
|
||||
}
|
||||
|
||||
status = status && verify_interval(RefDiscoveryPolicy,
|
||||
ReferenceProcessor::DiscoveryPolicyMin,
|
||||
ReferenceProcessor::DiscoveryPolicyMax,
|
||||
"RefDiscoveryPolicy");
|
||||
|
||||
// Limit the lower bound of this flag to 1 as it is used in a division
|
||||
// expression.
|
||||
status = status && verify_interval(TLABWasteTargetPercent,
|
||||
1, 100, "TLABWasteTargetPercent");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -336,6 +336,8 @@ class Arguments : AllStatic {
|
||||
static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
|
||||
return is_bad_option(option, ignore, NULL);
|
||||
}
|
||||
static bool verify_interval(uintx val, uintx min,
|
||||
uintx max, const char* name);
|
||||
static bool verify_percentage(uintx value, const char* name);
|
||||
static void describe_range_error(ArgsRange errcode);
|
||||
static ArgsRange check_memory_size(julong size, julong min_size);
|
||||
|
Loading…
x
Reference in New Issue
Block a user