Closed Bug 865635 Opened 12 years ago Closed 12 years ago

IonMonkey: Crash [@ isTagged]

Categories

(Core :: JavaScript Engine, defect)

x86
Linux
defect
Not set
critical

Tracking

()

VERIFIED FIXED
mozilla23
Tracking Status
firefox21 --- unaffected
firefox22 --- unaffected
firefox23 --- verified
firefox-esr17 --- unaffected
b2g18 --- unaffected

People

(Reporter: decoder, Assigned: bhackett1024)

References

Details

(Keywords: crash, sec-high, testcase, Whiteboard: [jsbugmon:update,ignore][adv-main23-])

Crash Data

Attachments

(1 file)

The following testcase crashes on mozilla-central revision 690b5e0f6562 (run with --ion-eager): function TestCase(d) this.description = d; function reportCompare (description) { if (typeof description == "undefined") description = ''; new TestCase(description); } reportCompare(0); gc(); function foo() {} evaluate("for(var i = 0; i < 1; ++i) reportCompare(foo[0]);", { noScriptRval : true });
Crash trace: Program received signal SIGSEGV, Segmentation fault. 0x084ea488 in isTagged (this=0x24) at /srv/repos/mozilla-central/js/src/ion/LIR.h:88 88 return !!(bits_ & TAG_MASK); (gdb) bt #0 0x084ea488 in isTagged (this=0x24) at /srv/repos/mozilla-central/js/src/ion/LIR.h:88 #1 kind (this=0x24) at /srv/repos/mozilla-central/js/src/ion/LIR.h:132 #2 isArgument (this=0x24) at /srv/repos/mozilla-central/js/src/ion/LIR.h:162 #3 js::ion::LinearScanAllocator::populateSafepoints (this=0xffffbb54) at /srv/repos/mozilla-central/js/src/ion/LinearScan.cpp:535 #4 0x084f2f68 in js::ion::LinearScanAllocator::go (this=0xffffbb54) at /srv/repos/mozilla-central/js/src/ion/LinearScan.cpp:1168 #5 0x084704c3 in js::ion::GenerateLIR (mir=0x8910c68) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1128 #6 0x0847246e in CompileBackEnd (mir=0x8910c68, maybeMasm=<optimized out>) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1208 #7 js::ion::SequentialCompileContext::compile (this=0xffffbe4f, builder=0x8910c68, graph=0x8910bd0, autoDelete=...) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1401 #8 0x08472f52 in IonCompile<js::ion::SequentialCompileContext> (compileContext=..., constructing=true, osrPc=0x8914b6b <incomplete sequence \343\232>, fp=..., script=<optimized out>, cx=0x88ca440) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1341 #9 js::ion::Compile<js::ion::SequentialCompileContext> (cx=0x88ca440, script=0xf75282b8, fp=..., osrPc=0x8914b6b <incomplete sequence \343\232>, constructing=false, compileContext=...) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1572 #10 0x084733bf in js::ion::CanEnterAtBranch (cx=0x88ca440, script=0xf75282b8, fp=..., pc=0x8914b6b <incomplete sequence \343\232>, isConstructing=false) at /srv/repos/mozilla-central/js/src/ion/Ion.cpp:1617 #11 0x0865c45c in EnsureCanEnterIon (jitcodePtr=<synthetic pointer>, pc=0x8914b6b <incomplete sequence \343\232>, script=0xf75282b8, frame=0xffffbf5c, cx=0x88ca440, stub=<optimized out>) at /srv/repos/mozilla-central/js/src/ion/BaselineIC.cpp:658 #12 DoUseCountFallback (infoPtr=0xffffbf48, frame=0xffffbf5c, stub=0x8931df8, cx=0x88ca440) at /srv/repos/mozilla-central/js/src/ion/BaselineIC.cpp:844 #13 js::ion::DoUseCountFallback (cx=0x88ca440, stub=0x8931df8, frame=0xffffbf5c, infoPtr=0xffffbf48) at /srv/repos/mozilla-central/js/src/ion/BaselineIC.cpp:803 #14 0xf770ebe1 in ?? () #15 0x08931df8 in ?? () #16 0xf77079ad in ?? () (gdb) x /i $pc => 0x84ea488 <js::ion::LinearScanAllocator::populateSafepoints()+760>: mov 0x24(%ecx),%eax (gdb) info reg ecx ecx 0x0 0 Looks like a null-deref but the test performs a gc() so marking s-s until investigated.
Whiteboard: [jsbugmon:update,bisect]
Whiteboard: [jsbugmon:update,bisect] → [jsbugmon:update]
JSBugMon: Bisection requested, result: autoBisect shows this is probably related to the following changeset: The first bad revision is: changeset: 129594:79f78c194329 user: Brian Hackett date: Fri Apr 12 07:25:50 2013 -0600 summary: Bug 804676 - Fix various fuzz bugs. This iteration took 144.571 seconds to run.
Attached patch patchSplinter Review
This is another case of lowering getting terminally confused when a type barrier has unexpected inputs. In this case the input was a box, and the input to the box was a constant value. The patch fixes this by using MMonitorTypes instead, which is basically a type barrier without the wonky behavior and closer to what the type write barriers want to be happening. The earlier workarounds for type barrier inputs are also rolled back here.
Attachment #741925 - Flags: review?(dvander)
Attachment #741925 - Flags: review?(dvander) → review+
Assuming this leads to badness. Feel free to adjust as appropriate.
Assignee: general → bhackett1024
Keywords: sec-high
Whiteboard: [jsbugmon:update] → [jsbugmon:update,ignore]
JSBugMon: The testcase found in this bug no longer reproduces (tried revision 0e45f1b9521f).
Status: NEW → RESOLVED
Closed: 12 years ago
Flags: in-testsuite?
Resolution: --- → FIXED
Target Milestone: --- → mozilla23
Status: RESOLVED → VERIFIED
JSBugMon: This bug has been automatically verified fixed.
Marking status-firefox23:verified based on comment 8.
Whiteboard: [jsbugmon:update,ignore] → [jsbugmon:update,ignore][adv-main23-]
Group: core-security
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: