Skip to content

Commit a352967

Browse files
backesmibrunin
authored andcommitted
[Backport] Security bug 378701682
Manual cherry-pick of patch originally reviewed on https://chromium-review.googlesource.com/c/v8/v8/+/6022072: Fix clobbered scratch register `GetMemOp` returns an `Operand` which can contain `kScratchRegister`. We should hence not clobber that register until after the last use of the `Operand`. This CL changes the scratch register to `kScratchRegister2` which has much fewer uses, and in particular none which collides with `GetMemOp`. R=mliedtke@chromium.org Fixed: 378779897, 378701682 Change-Id: Id1ed25edfe76200d069ac2ab54e5000eed313c8f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6022072 Reviewed-by: Matthias Liedtke <mliedtke@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/main@{#97224} Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/609218 Reviewed-by: Anu Aliyas <anu.aliyas@qt.io>
1 parent d35331d commit a352967

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

chromium/v8/src/wasm/baseline/x64/liftoff-assembler-x64-inl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ constexpr Operand kInstanceDataOperand = GetStackSlot(kInstanceOffset);
5656

5757
constexpr Operand kOSRTargetSlot = GetStackSlot(kOSRTargetOffset);
5858

59+
// Note: The returned Operand might contain {kScratchRegister2}; make sure not
60+
// to clobber that until after the last use of the Operand.
5961
inline Operand GetMemOp(LiftoffAssembler* assm, Register addr,
6062
Register offset_reg, uintptr_t offset_imm,
6163
ScaleFactor scale_factor = times_1) {
@@ -66,7 +68,7 @@ inline Operand GetMemOp(LiftoffAssembler* assm, Register addr,
6668
: Operand(addr, offset_reg, scale_factor, offset_imm32);
6769
}
6870
// Offset immediate does not fit in 31 bits.
69-
Register scratch = kScratchRegister;
71+
Register scratch = kScratchRegister2;
7072
assm->MacroAssembler::Move(scratch, offset_imm);
7173
if (offset_reg != no_reg) assm->addq(scratch, offset_reg);
7274
return Operand(addr, scratch, scale_factor, 0);

0 commit comments

Comments
 (0)