提交 174c98d9 编写于 作者: D dcubed

6567360: 3/4 SIGBUS in jvmti RawMonitor magic check for unaligned bad monitor pointer

Summary: Change JvmtiEnvBase::is_valid() and JvmtiRawMonitor::is_valid() to fetch the _magic fields via Bytes::get_native_u[248]().
Reviewed-by: coleenp, swamyv
上级 063714b3
......@@ -94,6 +94,35 @@ JvmtiEnvBase::initialize() {
}
bool
JvmtiEnvBase::is_valid() {
jint value = 0;
// This object might not be a JvmtiEnvBase so we can't assume
// the _magic field is properly aligned. Get the value in a safe
// way and then check against JVMTI_MAGIC.
switch (sizeof(_magic)) {
case 2:
value = Bytes::get_native_u2((address)&_magic);
break;
case 4:
value = Bytes::get_native_u4((address)&_magic);
break;
case 8:
value = Bytes::get_native_u8((address)&_magic);
break;
default:
guarantee(false, "_magic field is an unexpected size");
}
return value == JVMTI_MAGIC;
}
JvmtiEnvBase::JvmtiEnvBase() : _env_event_enable() {
_env_local_storage = NULL;
_tag_map = NULL;
......
......@@ -120,7 +120,7 @@ class JvmtiEnvBase : public CHeapObj {
public:
bool is_valid() { return _magic == JVMTI_MAGIC; }
bool is_valid();
bool is_retransformable() { return _is_retransformable; }
......
......@@ -238,6 +238,35 @@ JvmtiRawMonitor::~JvmtiRawMonitor() {
}
bool
JvmtiRawMonitor::is_valid() {
int value = 0;
// This object might not be a JvmtiRawMonitor so we can't assume
// the _magic field is properly aligned. Get the value in a safe
// way and then check against JVMTI_RM_MAGIC.
switch (sizeof(_magic)) {
case 2:
value = Bytes::get_native_u2((address)&_magic);
break;
case 4:
value = Bytes::get_native_u4((address)&_magic);
break;
case 8:
value = Bytes::get_native_u8((address)&_magic);
break;
default:
guarantee(false, "_magic field is an unexpected size");
}
return value == JVMTI_RM_MAGIC;
}
//
// class JvmtiBreakpoint
//
......
......@@ -349,7 +349,7 @@ public:
~JvmtiRawMonitor();
int magic() { return _magic; }
const char *get_name() { return _name; }
bool is_valid() { return _magic == JVMTI_RM_MAGIC; }
bool is_valid();
};
// Onload pending raw monitors
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册