Closed Bug 1209471 Opened 9 years ago Closed 9 years ago

Assertion failure: MIR instruction returned object with unexpected type, at js/src/jit/MacroAssembler.cpp:1531

Categories

(Core :: JavaScript Engine, defect)

x86_64
Linux
defect
Not set
critical

Tracking

()

VERIFIED FIXED
mozilla44
Tracking Status
firefox41 --- wontfix
firefox42 + verified
firefox43 + verified
firefox44 + verified
firefox-esr38 42+ fixed
b2g-v2.0 --- wontfix
b2g-v2.0M --- wontfix
b2g-v2.1 --- wontfix
b2g-v2.1S --- wontfix
b2g-v2.2 --- fixed
b2g-v2.2r --- fixed
b2g-master --- fixed
thunderbird_esr38 --- fixed

People

(Reporter: decoder, Assigned: bhackett1024)

Details

(4 keywords, Whiteboard: [jsbugmon:update,ignore][adv-main42+][adv-esr38.4+])

Attachments

(1 file)

The following testcase crashes on mozilla-central revision 79a5b2968d01 (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --disable-tests --enable-debug, run with --fuzzing-safe --thread-count=2 --ion-extra-checks):

function foo() {
  Object.prototype[2] = 2;
  delete Object.prototype[2];
  for (var i = 9; i < 10; i & 1970 & Function ^ (this) ^ (this))
    assertEq([2].concat([3])[0], 2);
} foo();



Backtrace:

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff7fd1a4e in ?? ()
#0  0x00007ffff7fd1a4e in ?? ()
#1  0x00007fffffffc570 in ?? ()
#2  0xfff9000000000000 in ?? ()
#3  0xfff8800000000002 in ?? ()
#4  0xfff8800000000002 in ?? ()
#5  0x0000000000000000 in ?? ()
rax	0x7ffff4800000	140737295417344
rbx	0x7ffff48fffa0	140737296465824
rcx	0x7ffff7e5c6d0	140737352419024
rdx	0x7fffffffccd0	140737488342224
rsi	0x7ffff6907400	140737330050048
rdi	0x7fffffffc798	140737488340888
rbp	0x7fffffffc868	140737488341096
rsp	0x7fffffffc828	140737488341032
r8	0x1	1
r9	0x7ffff6907420	140737330050080
r10	0x7fffffffc580	140737488340352
r11	0x7ffff6c27960	140737333328224
r12	0x8	8
r13	0x7ffff47fc0b0	140737295401136
r14	0x7ffff7e610c0	140737352437952
r15	0x0	0
rip	0x7ffff7fd1a4e	140737353947726
=> 0x7ffff7fd1a4e:	push   %r10
   0x7ffff7fd1a50:	push   %r9


Marking s-s because this assertion is known to be security-related.
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:   https://hg.mozilla.org/mozilla-central/rev/19d5d9619443
user:        Brian Hackett
date:        Sun Jun 14 08:02:44 2015 -0700
summary:     Bug 1162986 - Allow objects to be turned into singletons dynamically, r=jandem.

This iteration took 192.722 seconds to run.
Flags: needinfo?(bhackett1024)
Attached patch patchSplinter Review
I don't think bug 1162986 is at fault here.  The basic problem here is that when we Ion compile Array.concat we assume a particular result group for the result of the concat, but when we execute we can go down a path in array_concat which creates an array with a generic unknown-properties group instead.  Unfortunately this problem seems to go back pretty far, including to before the unboxed array changes in jsarray.cpp.
Assignee: nobody → bhackett1024
Flags: needinfo?(bhackett1024)
Attachment #8668988 - Flags: review?(jdemooij)
Comment on attachment 8668988 [details] [diff] [review]
patch

[Security approval request comment]
How easily could an exploit be constructed based on the patch?

not easily

Do comments in the patch, the check-in comment, or tests included in the patch paint a bulls-eye on the security problem?

no

Which older supported branches are affected by this flaw?

all of them, I think

If not all supported branches, which bug introduced the flaw?

Do you have backports for the affected branches? If not, how different, hard to create, and risky will they be?

backports should be simple

How likely is this patch to cause regressions; how much testing does it need?

not at all

Approval Request Comment
[User impact if declined]: potential exploit
[Describe test coverage new/current, TreeHerder]: none
[Risks and why]: none
Attachment #8668988 - Flags: sec-approval?
Attachment #8668988 - Flags: approval-mozilla-beta?
Attachment #8668988 - Flags: approval-mozilla-aurora?
Comment on attachment 8668988 [details] [diff] [review]
patch

Approvals given. We'll want an ESR38 patch as well.
Attachment #8668988 - Flags: sec-approval?
Attachment #8668988 - Flags: sec-approval+
Attachment #8668988 - Flags: approval-mozilla-beta?
Attachment #8668988 - Flags: approval-mozilla-beta+
Attachment #8668988 - Flags: approval-mozilla-aurora?
Attachment #8668988 - Flags: approval-mozilla-aurora+
Attachment #8668988 - Flags: review?(jdemooij) → review+
Whiteboard: [jsbugmon:update] → [jsbugmon:update,ignore]
JSBugMon: The testcase found in this bug no longer reproduces (tried revision 89732fcdb0ba).
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
JSBugMon: This bug has been automatically verified fixed.
JSBugMon: This bug has been automatically verified fixed on Fx42
JSBugMon: This bug has been automatically verified fixed on Fx43
Group: javascript-core-security → core-security-release
b2g37_v2_2 should call TryReuseArrayType instead of TryReuseArrayGroup.
Flags: needinfo?(bhackett1024)
I'll land that when I get home tonight. ni? to remind me.
Flags: needinfo?(wkocher)
Whiteboard: [jsbugmon:update,ignore] → [jsbugmon:update,ignore][adv-main42+][adv-esr38.4+]
Group: core-security-release
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: