A few weeks ago I looked at a bunch of minidumps of JIT crashes (we
save some code around the instruction pointer and Ted wrote a tool [0]
to extract it from the dump and pass it to objdump).

Most of these crashes were either obvious memory corruption (for
instance, a typical instruction sequence with 4 corrupt bytes in the
middle), invalid instruction pointer or valid JIT code but accessing a
bogus (object) pointer, suggesting a problem elsewhere.

Downloading minidumps and disassembling them takes a lot of time
though; it'd be really great if we could integrate this into
crash-stats, so that we can analyze dumps much faster. I also found
bug 627111 [1] to automatically categorize JIT crashes. If we could
run that script every day and post the results as a graph somewhere it
may be easier to detect new crashes.

Jan

[0] 
http://hg.mozilla.org/users/tmielczarek_mozilla.com/get-minidump-instructions/
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=627111

On Thu, Feb 27, 2014 at 5:57 PM, Bill McCloskey <[email protected]> wrote:
> We poison the GC heap with 0xda on nightly and aurora [1]. Lots of our 
> processMarkStackTop are at this address [2]. It looks like we only poison Ion 
> code in debug builds [3]. That should be easy to fix by removing the #ifdef 
> DEBUG.
>
> I don't think we've found GC heap poisoning to be all that helpful for 
> debugging in crashstats. The stacks are almost always really generic. All you 
> know is that some code didn't root something properly, but it could be 
> anywhere in Gecko. Poisoning has been very helpful when we have an STR, since 
> it improves reproducibility. However, we rarely get an STR for these crashes.
>
> One thing I've noticed in the past is that certain add-ons seem to increase 
> the frequency of GC crashes (not necessarily though any misbehavior on their 
> part). The correlations that show up in crashstats aren't very helpful here 
> since so many different crashes are lumped together. I wonder if we could do 
> a more sophisticated analysis to try to find the problematic add-ons. Then we 
> could try to do some manual (or automatic) testing with those add-ons and 
> hopefully get some full crashdumps, which would be more useful than what we 
> have now.
>
> -Bill
>
> [1] http://mxr.mozilla.org/mozilla-central/source/js/src/jsgc.cpp#477
> [2] 
> https://crash-stats.mozilla.com/report/index/50bb404b-5b0b-458a-b3b6-5a2ba2140226
> [3] http://mxr.mozilla.org/mozilla-central/source/js/src/jit/Ion.cpp#681
>
> ----- Original Message -----
>> From: "Benjamin Smedberg" <[email protected]>
>> To: "JS Internals list" <[email protected]>
>> Sent: Thursday, February 27, 2014 6:23:07 AM
>> Subject: [JS-internals] Memory poisoning and other ways to make stability    
>>  issues more reproducible
>>
>> [tl;dr: please poison GC and JIT memory when it is freed]
>>
>> I mentioned this at the engineering meeting last Tuesday but I don't
>> think I hit the right audience so I thought I'd repost it here.
>>
>> We currently have some important crashes that are currently not
>> actionable based on crash stats. If you take a look at the current 28
>> beta topcrashes, the #3 topcrash (js::GCMarker::processMarkStackTop) is
>> a GC crash probably due to a corrupt GC heap/dangling pointers.
>>
>> The #5 crash (EnterBaseline) is a generic signature for any crash that
>> happens in the JIT.
>>
>> There are a few others such as
>> JSScript::markChildren/ScanRope/FinalizeArenas.
>>
>> A lot of our current efforts have revolved around using fuzzers to
>> detect these kinds of situations. But we really need to try and use our
>> release population more effectively to discover why these issues are
>> happening and fix them.
>>
>> We recently landed memory poisoning on free() in the Firefox codebase
>> (bug 860254). This provides some defense in depth for individual users,
>> but its primary purpose is to make use-after-free crashes happen more
>> quickly and with stack traces that are more useful. For the most part
>> this change does not appear to have affected performance (except for
>> tsvg tests on macOS which have strange symptoms).
>>
>> I'd like the JS team to consider doing the same kind of memory poisoning
>> in release builds for the various JS heaps which aren't the jemalloc heap:
>>
>> * The GC
>> * The various JIT code buffers
>> * Any other relevant caches or specialized allocators where normal
>> free() poisoning doesn't work
>>
>> Thoughts? I don't know enough about this to file specific bugs, so I'm
>> looking to you on the JS team to identify what things are candidates and
>> filing the bugs. Especially if there are mentors for the bugs, I have
>> some great volunteers who have been fixing OOM issues recently who might
>> love to help take some of these bugs and fix them.
>>
>> --BDS
>>
>> _______________________________________________
>> dev-tech-js-engine-internals mailing list
>> [email protected]
>> https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals
>>
> _______________________________________________
> dev-tech-js-engine-internals mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals
_______________________________________________
dev-tech-js-engine-internals mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

Reply via email to