8272058: 25 Null pointer dereference defect groups in 4 files
Reviewed-by: gziemski, coleenp, dlong
This commit is contained in:
parent
28e02fa2cb
commit
f5de6fa799
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -160,8 +160,7 @@ int MacroAssembler::pd_patch_instruction_size(address branch, address target) {
|
||||
Instruction_aarch64::patch(branch+8, 20, 5, (dest >>= 16) & 0xffff);
|
||||
assert(target_addr_for_insn(branch) == target, "should be");
|
||||
instructions = 3;
|
||||
} else if (Instruction_aarch64::extract(insn, 31, 22) == 0b1011100101 &&
|
||||
Instruction_aarch64::extract(insn, 4, 0) == 0b11111) {
|
||||
} else if (NativeInstruction::is_ldrw_to_zr(address(&insn))) {
|
||||
// nothing to do
|
||||
assert(target == 0, "did not expect to relocate target for polling page load");
|
||||
} else {
|
||||
@ -284,15 +283,19 @@ address MacroAssembler::target_addr_for_insn(address insn_addr, unsigned insn) {
|
||||
return address(uint64_t(Instruction_aarch64::extract(insns[0], 20, 5))
|
||||
+ (uint64_t(Instruction_aarch64::extract(insns[1], 20, 5)) << 16)
|
||||
+ (uint64_t(Instruction_aarch64::extract(insns[2], 20, 5)) << 32));
|
||||
} else if (Instruction_aarch64::extract(insn, 31, 22) == 0b1011100101 &&
|
||||
Instruction_aarch64::extract(insn, 4, 0) == 0b11111) {
|
||||
return 0;
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
return address(((uint64_t)insn_addr + (offset << 2)));
|
||||
}
|
||||
|
||||
address MacroAssembler::target_addr_for_insn_or_null(address insn_addr, unsigned insn) {
|
||||
if (NativeInstruction::is_ldrw_to_zr(address(&insn))) {
|
||||
return 0;
|
||||
}
|
||||
return MacroAssembler::target_addr_for_insn(insn_addr, insn);
|
||||
}
|
||||
|
||||
void MacroAssembler::safepoint_poll(Label& slow_path, bool at_return, bool acquire, bool in_nmethod) {
|
||||
if (acquire) {
|
||||
lea(rscratch1, Address(rthread, JavaThread::polling_word_offset()));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2021, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -606,10 +606,15 @@ public:
|
||||
static bool uses_implicit_null_check(void* address);
|
||||
|
||||
static address target_addr_for_insn(address insn_addr, unsigned insn);
|
||||
static address target_addr_for_insn_or_null(address insn_addr, unsigned insn);
|
||||
static address target_addr_for_insn(address insn_addr) {
|
||||
unsigned insn = *(unsigned*)insn_addr;
|
||||
return target_addr_for_insn(insn_addr, insn);
|
||||
}
|
||||
static address target_addr_for_insn_or_null(address insn_addr) {
|
||||
unsigned insn = *(unsigned*)insn_addr;
|
||||
return target_addr_for_insn_or_null(insn_addr, insn);
|
||||
}
|
||||
|
||||
// Required platform-specific helpers for Label::patch_instructions.
|
||||
// They _shadow_ the declarations in AbstractAssembler, which are undefined.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -315,7 +315,7 @@ void NativeMovRegMem::set_offset(int x) {
|
||||
|
||||
void NativeMovRegMem::verify() {
|
||||
#ifdef ASSERT
|
||||
address dest = MacroAssembler::target_addr_for_insn(instruction_address());
|
||||
address dest = MacroAssembler::target_addr_for_insn_or_null(instruction_address());
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -329,7 +329,7 @@ void NativeJump::check_verified_entry_alignment(address entry, address verified_
|
||||
|
||||
|
||||
address NativeJump::jump_destination() const {
|
||||
address dest = MacroAssembler::target_addr_for_insn(instruction_address());
|
||||
address dest = MacroAssembler::target_addr_for_insn_or_null(instruction_address());
|
||||
|
||||
// We use jump to self as the unresolved address which the inline
|
||||
// cache code (and relocs) know about
|
||||
|
Loading…
x
Reference in New Issue
Block a user