Closed Bug 1263902 Opened 9 years ago Closed 9 years ago

Crash [@ __strlen_sse2_bsf] with OOM and asm.js

Categories

(Core :: JavaScript Engine, defect)

x86
Linux
defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla48
Tracking Status
firefox48 --- fixed

People

(Reporter: decoder, Assigned: lth)

References

(Blocks 1 open bug)

Details

(Keywords: crash, testcase, Whiteboard: [jsbugmon:update,ignore])

Crash Data

Attachments

(1 file, 1 obsolete file)

The following testcase crashes on mozilla-central revision 29d5a4175c8b (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --target=i686-pc-linux-gnu --disable-tests --enable-debug, run with --fuzzing-safe --thread-count=2 --ion-offthread-compile=off): lfLogBuffer = ` buf = new ArrayBuffer(4096) function ffi() {} function FFI1(glob, imp, b) { "use asm" var f32=new glob.Float32Array(b); var f64=new glob.Float64Array(b); var ffi=imp.ffi; function g() { ffi(+f64[0]); } return g; } g = FFI1(this, {ffi}, buf) for (i of a) for (j of a) { u32 = i; } `.split('\n') lfCodeBuffer = ""; while (true) { line = lfLogBuffer.shift() if (line == null) break; lfCodeBuffer += line + "\n" } loadFile(lfCodeBuffer) function loadFile(lfVarx) { oomTest(function() { eval(lfVarx) }) } Backtrace: Program received signal SIGSEGV, Segmentation fault. __strlen_sse2_bsf () at ../sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S:50 #0 __strlen_sse2_bsf () at ../sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S:50 #1 0x085619f1 in js::ExpandErrorArgumentsVA (cx=cx@entry=0xf7a77020, callback=callback@entry=0x8546240 <js::GetErrorMessage(void*, unsigned int)>, userRef=userRef@entry=0x0, errorNumber=errorNumber@entry=274, messagep=messagep@entry=0xffffa090, reportp=reportp@entry=0xffffa0a0, argumentsType=argumentsType@entry=js::ArgumentsAreASCII, ap=0xffffa138 "\360\004\227\365\315\006\032\b", ap@entry=0xffffa134 "") at js/src/jscntxt.cpp:616 #2 0x08561c6a in js::ReportErrorNumberVA (cx=0xf7a77020, flags=flags@entry=1, callback=callback@entry=0x8546240 <js::GetErrorMessage(void*, unsigned int)>, userRef=userRef@entry=0x0, errorNumber=errorNumber@entry=274, argumentsType=argumentsType@entry=js::ArgumentsAreASCII, ap=ap@entry=0xffffa134 "") at js/src/jscntxt.cpp:752 #3 0x08563464 in JS_ReportErrorFlagsAndNumber (cx=cx@entry=0xf7a77020, flags=flags@entry=1, errorCallback=0x8546240 <js::GetErrorMessage(void*, unsigned int)>, userRef=userRef@entry=0x0, errorNumber=errorNumber@entry=274) at js/src/jsapi.cpp:5582 #4 0x081dc9a7 in LinkFail (str=0x0, cx=0xf7a77020) at js/src/asmjs/AsmJS.cpp:7028 #5 CheckBuffer (buffer=..., bufferVal=..., module=..., cx=0xf7a77020) at js/src/asmjs/AsmJS.cpp:7434 #6 DynamicallyLinkModule (exportObj=..., moduleObj=..., args=..., cx=0xf7a77020) at js/src/asmjs/AsmJS.cpp:7464 #7 LinkAsmJS (cx=0xf7a77020, argc=3, vp=0xf5625120) at js/src/asmjs/AsmJS.cpp:7626 #8 0x0871e30a in js::CallJSNative (cx=0xf7a77020, native=0x81db3f0 <LinkAsmJS(JSContext*, unsigned int, JS::Value*)>, args=...) at js/src/jscntxtinlines.h:235 #9 0x0871a79d in js::Invoke (cx=0xf7a77020, args=..., construct=construct@entry=js::NO_CONSTRUCT) at js/src/vm/Interpreter.cpp:476 #10 0x0870a38a in Interpret (cx=cx@entry=0xf7a77020, state=...) at js/src/vm/Interpreter.cpp:2807 #11 0x0871a51f in js::RunScript (cx=cx@entry=0xf7a77020, state=...) at js/src/vm/Interpreter.cpp:426 #12 0x0871d30d in js::ExecuteKernel (cx=cx@entry=0xf7a77020, script=..., script@entry=..., scopeChainArg=..., newTargetValue=..., evalInFrame=evalInFrame@entry=..., result=0xffffaf88) at js/src/vm/Interpreter.cpp:682 #13 0x084c5d2b in EvalKernel (cx=cx@entry=0xf7a77020, args=..., evalType=evalType@entry=DIRECT_EVAL, caller=..., scopeobj=..., scopeobj@entry=..., pc=0xf5750769 "{") at js/src/builtin/Eval.cpp:332 #14 0x084c6732 in js::DirectEval (cx=cx@entry=0xf7a77020, args=...) at js/src/builtin/Eval.cpp:439 #15 0x08280335 in js::jit::DoCallFallback (cx=0xf7a77020, frame=0xffffafc8, stub_=0xf7aaa0b0, argc=1, vp=0xffffaf88, res=...) at js/src/jit/BaselineIC.cpp:6100 #16 0xf7fcedce in ?? () #17 0xf7aaa0b0 in ?? () #18 0xf7fc8c5c in ?? () #19 0x0825cd1a in EnterBaseline (cx=0xf7aaa0b0, cx@entry=0xf7a77020, data=...) at js/src/jit/BaselineJIT.cpp:150 #20 0x0827ab9e in js::jit::EnterBaselineMethod (cx=cx@entry=0xf7a77020, state=...) at js/src/jit/BaselineJIT.cpp:188 #21 0x0871a5bb in js::RunScript (cx=cx@entry=0xf7a77020, state=...) at js/src/vm/Interpreter.cpp:416 #22 0x0871a7fa in js::Invoke (cx=0xf7a77020, args=..., construct=construct@entry=js::NO_CONSTRUCT) at js/src/vm/Interpreter.cpp:494 #23 0x0871bf4a in js::Invoke (cx=cx@entry=0xf7a77020, thisv=..., fval=..., argc=argc@entry=0, argv=argv@entry=0x0, rval=rval@entry=...) at js/src/vm/Interpreter.cpp:528 #24 0x08556d30 in JS_CallFunction (cx=cx@entry=0xf7a77020, obj=..., fun=fun@entry=..., args=..., rval=rval@entry=...) at js/src/jsapi.cpp:2865 #25 0x0886737b in OOMTest (cx=0xf7a77020, argc=1, vp=0xf56250b8) at js/src/builtin/TestingFunctions.cpp:1311 [...] #47 main (argc=5, argv=0xffffcc24, envp=0xffffcc3c) at js/src/shell/js.cpp:7443 eax 0x0 0 ebx 0x98a9314 160076564 ecx 0x0 0 edx 0x0 0 esi 0x0 0 edi 0x0 0 ebp 0xffffa068 4294942824 esp 0xffff9fa4 4294942628 eip 0xf7d11e86 <__strlen_sse2_bsf+22> => 0xf7d11e86 <__strlen_sse2_bsf+22>: movdqu (%edi),%xmm1 0xf7d11e8a <__strlen_sse2_bsf+26>: pcmpeqb %xmm1,%xmm0
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/a196bd265eab user: Lars T Hansen date: Mon Nov 02 09:07:47 2015 +0100 summary: Bug 1218643 - remove support for deprecated asm.js heap length. r=luke This iteration took 328.457 seconds to run.
That patch did not introduce the bug, but it changed a constraint so that an existing OOM problem is revealed. The problem is that if a construction of an error message by JS_smprintf fails for OOM reasons then we start passing a null pointer around. The problem is not exactly pervasive but this is not the only place it occurs.
Ben, can you look at the AsmJS.cpp changes? Shu, can you look at the Debugger.cpp changes? Thx.
Attachment #8742353 - Flags: review?(shu)
Assignee: nobody → lhansen
Status: NEW → ASSIGNED
Attachment #8742353 - Flags: review?(bbouvier)
Comment on attachment 8742353 [details] [diff] [review] check return value from JS_smprintf Review of attachment 8742353 [details] [diff] [review]: ----------------------------------------------------------------- Looks good, thanks!
Attachment #8742353 - Flags: review?(bbouvier) → review+
Missed a spot in the JS shell
Attachment #8742355 - Flags: review?(shu)
Attachment #8742355 - Flags: review?(bbouvier)
Attachment #8742353 - Attachment is obsolete: true
Attachment #8742353 - Flags: review?(shu)
Comment on attachment 8742355 [details] [diff] [review] check return value from JS_smprintf (Cleaning up my own mess here.) bbouvier r+'d the AsmJS.cpp bits on the previous patch. Shu, can you look at the remaining changes to Debugger.cpp and js.cpp? Thanks.
Attachment #8742355 - Flags: review?(bbouvier)
Comment on attachment 8742355 [details] [diff] [review] check return value from JS_smprintf Review of attachment 8742355 [details] [diff] [review]: ----------------------------------------------------------------- Woops, thanks for the fix.
Attachment #8742355 - Flags: review?(shu) → review+
Whiteboard: [jsbugmon:update] → [jsbugmon:update,ignore]
JSBugMon: The testcase found in this bug no longer reproduces (tried revision 67ac40fb8f68).
Did this somehow land?
Flags: needinfo?(lhansen)
(In reply to Gary Kwong [:gkw] [:nth10sd] from comment #9) > Did this somehow land? Not according to hg.mozilla.org. Note this is 32-bit only. It was reported on Linux but I've repro'd on Mac OS. (There was some bug traffic earlier this month re rewriting the printf library, and if that happened & landed it could have affected the OOM condition here.)
Flags: needinfo?(lhansen)
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla48
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: