Closed Bug 1970192 Opened 10 months ago Closed 10 months ago

Assertion failure: movable == IsMovable::No, at jit/WarpBuilderShared.cpp:68

Categories

(Core :: JavaScript Engine: JIT, defect)

All
Linux
defect

Tracking

()

RESOLVED FIXED
141 Branch
Tracking Status
firefox-esr128 --- unaffected
firefox-esr140 --- unaffected
firefox139 --- unaffected
firefox140 --- unaffected
firefox141 --- fixed

People

(Reporter: gkw, Assigned: anba)

References

(Blocks 1 open bug, Regression)

Details

(Keywords: regression, reporter-external, testcase)

Attachments

(2 files)

Attached file debug stack
var f = Iterator.prototype.drop;
for (var k = 0; k < 99; ++k) {
  try {
    (function () {
      f();
    })();
  } catch (e) {}
}
(gdb) bt
#0  0x00005555580fcb3d in MOZ_CrashSequence (aAddress=0x0, aLine=68)
    at /home/msf1/shell-cache/js-dbg-64-linux-x86_64-ce689cd992f5/objdir-js/dist/include/mozilla/Assertions.h:248
#1  js::jit::WarpBuilderShared::unboxObjectInfallible (this=0x7fffffffba68, def=0x7ffff5bc01e0, movable=js::jit::WarpBuilderShared::IsMovable::Yes)
    at /home/msf1/trees/mozilla-central/js/src/jit/WarpBuilderShared.cpp:68
#2  js::jit::WarpBuilder::build_CloseIter (this=this@entry=0x7fffffffba68, loc=...) at /home/msf1/trees/mozilla-central/js/src/jit/WarpBuilder.cpp:1869
#3  0x00005555580f6fc7 in js::jit::WarpBuilder::buildBody (this=this@entry=0x7fffffffba68)
    at /home/msf1/trees/mozilla-central/js/src/jit/WarpBuilder.cpp:689
#4  0x000055555810dd92 in js::jit::WarpBuilder::buildInline (this=0x7fffffffba68) at /home/msf1/trees/mozilla-central/js/src/jit/WarpBuilder.cpp:320
#5  js::jit::WarpBuilder::buildInlinedCall (this=this@entry=0x7fffffffc0c0, loc=..., inlineSnapshot=inlineSnapshot@entry=0x7ffff5bbf940, callInfo=...)
    at /home/msf1/trees/mozilla-central/js/src/jit/WarpBuilder.cpp:3742
/snip
The first bad revision is:
changeset:   https://hg.mozilla.org/mozilla-central/rev/97665d31b0b6
user:        André Bargull
date:        Tue May 27 07:03:57 2025 +0000
summary:     Bug 1935510 - Part 2: Perform IteratorClose when limit coercion throws or limit is invalid. r=spidermonkey-reviewers,iain

Run with --fuzzing-safe --no-threads --fast-warmup --ion-warmup-threshold=100, compile with AR=ar sh ../configure --enable-debug --enable-debug-symbols --with-ccache --enable-nspr-build --enable-ctypes --enable-gczeal --enable-rust-simd --disable-tests, tested on m-c rev ce689cd992f5.

Andre, is bug 1935510 a likely regressor?

Flags: sec-bounty?
Flags: needinfo?(andrebargull)
Group: core-security → javascript-core-security

Set release status flags based on info from the regressing bug 1935510

Yes, it's a regression from bug 1935510. Bug 1851976 added this assertion, so I guess using IsMovable::No in WarpBuilder::build_CloseIter is enough to fix this.

Flags: needinfo?(andrebargull)
Assignee: nobody → andrebargull
Status: NEW → ASSIGNED

What are the security implications? Seems dangerous to be moving something that we think shouldn't be moved.

Flags: needinfo?(andrebargull)

This does not look security sensitive.

In this context, "movable" means that we can hoist computation of this value earlier. In this case, there's probably no way to hoist this node, because it's unreachable. If we did somehow hoist it, then it would unbox a value, which is just bit-twiddling without a consumer. If we also somehow hoisted a consumer and tried to dereference the unboxed value, it would be UnboxAsObject(UndefinedValue()), which (depending on platform) is either a null pointer, or a pointer with only high bits set, both of which would crash safely.

In short: an attacker would have to overcome multiple obstacles just to turn this into a safe crash.

Flags: needinfo?(andrebargull)
Group: javascript-core-security
Status: ASSIGNED → RESOLVED
Closed: 10 months ago
Resolution: --- → FIXED
Target Milestone: --- → 141 Branch
Flags: sec-bounty? → sec-bounty-

Set release status flags based on info from the regressing bug 1935510

QA Whiteboard: [qa-triage-done-c142/b141]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: