clusterfuzz - nullcon · pdf fileclusterfuzz architect fuzzer author and facilitator ......

55
Abhishek Arya <[email protected]> ClusterFuzz

Upload: ngokien

Post on 16-Mar-2018

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Abhishek Arya <[email protected]>

ClusterFuzz

Page 2: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

About me!

○ Member, Chrome Security Team○ Tech Lead of Bugs-- FA○ ClusterFuzz architect○ Fuzzer author and facilitator○ Hack other browsers in free time

Page 3: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Chrome Vulns: Past trends

Page 4: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Solution: ClusterFuzz

Page 5: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Google Compute Engine and Chrome Lab

BackendFrontend

Bots

Builder Bots1. Trunk (Release (-

O2+-O1), Debug) 2. Stable, Beta

Sync Bots using Glusterfs

1. Fuzzer data bundles

2. Build Cache3. Code Coverage

Appengine

Local Storage1. Tests

2. Fuzzers3. Some fuzzer data bundles

4. Builds

Google Cloud Storage

Blobstore1. Custom binaries2. Crash testcases

3. User uploaded testcases4. Fuzzers

5. Fuzzer data bundles (small)

Task Pull Queues

High replication datastoreAll the metadata - Jobs, Crash List, Crash Stats, Fuzzers, Bot

tasks, Bot heartbeats, etc.

Tasks1. Fuzz

2. Minimize 3. Impact

4. Regression5. Fixed

6. Sheriff7. Coverage

ClusterFuzz UI

ClusterFuzz: Architectural Overview

Page 6: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

ClusterFuzz: Goals

Automated crash detection, analysis and management

Fully reproducible andminimized testcases

Real-time regression andfixed testing

Page 7: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Automated crash detection, analysis and management

Page 8: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Goal 1:Crash Automation & Management

○ Fuzzers○ Code Coverage○ Memory Debugging Tools○ Scale, Scale and Scale○ Vulnerability Reward Program

Page 9: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Common semantics, e.g. run.* --input_dir=A --output_dir=B --no_of_files=C

○ Common prefix ‘fuzz-’ (+tags like http-, flags-)○ Cross-platform (python, perl, nodejs, etc)○ Data bundles (+shared)○ Other scripts - launcher, coverage, etc

Fuzzers: How to write one ?

Page 10: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Setup build {trunk}, run application with test○ Choose params

○ Gestures, tool settings, timeout multiplier, window location+size, etc.

○ Figure out resource dependencies○ Test for reproducibility○ Test for duplicates○ Store crash, coverage, stats, etc

Fuzzers: What infrastructure does?

Page 11: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Disable inline frames, e.g. -inlining in llvm-symbolizer

○ crash_type - e.g. Heap-buffer-overflow READ 2○ crash_state - top 3 frames

○ +namespaces, -line_numbers○ e.g.

WebCore::SVGDocumentExtensions::removeAnimationElementWebCore::SVGSMILElement::removedFromWebCore::ContainerNode::removeChild

○ security_flag

Testcase Duplication Check

Page 12: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Generation based fuzzers○ Mutation based fuzzers○ Evolutionary fuzzers

Fuzzers: Types

Page 13: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Isolated, based on specification / api○ Quick to hack and deliver○ Complex >>> simple strategies○ Finds bugs fast, fades even faster○ Good for catching regressions○ Example bug: {now fixed}

document.body = document.createElement(‘iframe’)

Generation based fuzzers

Page 14: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ CSS Parser○ Editing API○ WebAudio API○ <canvas> API○ etc

Generation based fuzzers: Examples

Page 15: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Initial work on test corpus (example)○ Simple >>> Complex strategies○ Steady stream of bugs over time○ Suited well for file format, protocol fuzzing○ Cautions - checksums, compression, etc○ Good value for the buck

Mutation Based Fuzzers

Page 16: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Pick several tests from mjsunit (V8’s tests)○ Prepare the test

○ Normalize variables and function names○ Cleanup to minimize exceptions○ Combine multiple tests into a single test

○ Mutate the test○ Replace variables or function calls to

exercise potentially untested cases○ Trigger function optimization, gc(), ...○ etc...

Mutation Based Fuzzers: Example {V8}

Page 17: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

var a = new Int32Array(1024);

function test_base(a, base, condition) {

a[base + 1] = 1;

a[base + 4] = 2;

a[base + 3] = 3;

a[base + 2] = 4;

a[base + 4] = base + 4;

if (condition) {

a[base + 1] = 1;

}

}

test_base(a, 1, true);%OptimizeFunctionOnNextCall(test_base);test_base(a, 3, false);

https://crbug.com/344186

V8 Bounds check removal bugvar __v_0 = new Int32Array(1024);

function __f_1(__v_28, base, condition) {

__v_0[base - 1] = 1;

__v_0[base - 10] = 2;

__v_0[base + 3] = 3;

__v_0[base + 2] = 4;

__v_0[base + 4] = base + 4;

if (condition) {

__v_0[base + 1] = 1;

}

}

__f_1(__v_0, 11, true);%OptimizeFunctionOnNextCall(__f_1);__f_1(__v_1, -4, false); // Crash

Page 18: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Lets talk about something else...

Evolutionary Fuzzers

Page 19: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Code Coverage

○ Function level coverage - [A]○ Block level coverage - [B], [C], [D]○ Edge level coverage - [B], [C], [D], [E]

where E = dummy b/w B and D.

void foo(int *a) { [A] if (a) [B] *a = 0; [C]} [D]

Page 20: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Initially part of AddressSanitizer (ASAN)○ In-process fuzzing for speed○ Work-in-progress export to other sanitizers○ Needs latest clang >= r217106○ No contention on counters○ Negligible I/O overhead○ CPU overhead (Function: <5%, Edge: < 40%)

Code Coverage

Page 21: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

~ indicates partial support, --- No support

Android ASAN coverage

Linux ASAN coverage

Mac ---

Windows ---

Chrome OS ~~~

iOS ---

Code Coverage: Platforms

Page 22: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Code Coverage: Aggregate View Sample

Page 23: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Feedback-driven fuzzing○ Additional build instrumentation {+overhead}○ Per-testcase coverage {pcs vs syms}○ Shared storage for ::

○ aggregate coverage○ optimal files list + metadata

Evolutionary Fuzzers

Page 24: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

fuzzer_utils.createCoverageFile( fuzz_testcase_file_path, original_file_path=None, testcase_is_modified=True, clear_testcase_with_zero_coverage=True, store_modified_testcases=True)

Code Coverage: fuzzer_utils api

Page 25: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ testcase_is_original○ new coverage -> add to optimal files list○ no new coverage -> delete if

clear_testcase_with_zero_testcase set○ testcase_is_modified

○ new coverage -> add to corpus+optimal file list if store_modified_testcases set

○ no new coverage -> ignore

Code Coverage: fuzzer_utils api

Page 26: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Why not Valgrind ??○ cpu: 10-300x○ heap bugs only○ slow boot

○ Why not a single tool ??○ Slowdowns will add up○ Memory overheads will multiply○ Non-trivial to implement

Memory Debugging Tools

Page 27: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ AddressSanitizer (aka ASan)○ detects use-after-free, buffer overflows

(heap, stack, globals), stack-use-after-return, container-overflow.

○ cpu: 2x, memory: 1.5x-3x

○ ThreadSanitizer (aka TSan)○ detects data races, esp on use-after-frees,

object vptr.○ cpu: 4x-10x, memory: 5x-8x

Memory Debugging Tools

Page 28: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ MemorySanitizer (aka MSan)○ detects uninitialized memory reads○ cpu: 3x, memory: 2x○ special mode: origins

○ UndefinedBehaviorSanitizer (aka UBSan)○ detects several classes of bugs(19), esp on

type confusion, etc.○ cpu: unavailable○ memory: ~1x (no allocator, no shadow).

Memory Debugging Tools

Page 29: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Others○ SyzyASAN○ DrMemory

Memory Debugging Tools

Page 30: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Type confusion (UBsan vptr)../../third_party/WebKit/Source/core/rendering/RenderTable.h:366:1: runtime error: downcast of address 0x3e5988411f38 which does not point to an object of type blink::RenderTable0x3e5988411f38: note: object is of type blink::RenderBlockFlow 00 00 00 00 d8 94 4b 4f 33 7f 00 00 60 f0 47 eb 8b 06 00 00 00 40 60 b8 68 3c 00 00 48 81 45 88 ^~~~~~~~~~~~~~~~~~~~~~~ vptr for blink::RenderBlockFlow #0 0x7f33475e5867 in blink::RenderTableSection::table() const third_party/WebKit/Source/core/rendering/RenderTable.h:366:1 #1 0x7f3347606aae in blink::RenderTableSection::setNeedsCellRecalc() third_party/WebKit/Source/core/rendering/RenderTableSection.cpp:1433:26

Memory Debugging Tools: Examples

Page 31: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Container-overflow (ASAN)#include <vector>

#include <assert.h>

typedef long T;

int main() {

std::vector<T> v;

v.push_back(0);

v.push_back(1);

v.push_back(2);

assert(v.capacity() >= 4);

assert(v.size() == 3);

T *p = &v[0];

// Here the memory is accessed inside a heap-allocated buffer

// but outside of the region `[v.begin(), v.end())`.

return p[3]; // OOPS.

}

Memory Debugging Tools: Examples

Page 32: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Buffer overflow Use after free Type

confusionUninitialized

valueSame origin

bypass

Android ASAN,~Sec-asserts~ ASAN ~Sec-asserts~ ---

Site Isolation Project

Linux ASAN,~Sec-asserts~ ASAN, TSAN UBSAN vptr,

~Sec-asserts~ MSAN

Mac ASAN,~Sec-asserts~ ASAN ~Sec-asserts~ ---

Windows

ASAN, SyzyASAN,

~DrMemory~,~Sec-asserts~

ASAN, SyzyASAN,

~DrMemory~~Sec-asserts~ ~DrMemory~

ChromeOS ~WIP~ ~WIP~ ~WIP~ ~WIP~

iOS --- --- --- ---

~ indicates partial support, --- No support

Memory Debugging Tools

Page 33: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Linux - 3000○ Windows - 1000○ Android - 100○ Mac - 20○ ChromeOS - ~WIP~○ iOS - ~WIP~

Scale, Scale and Scale

Page 34: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Chrome Vulnerability Reward Program (VRP)○ Started in late January 2010.○ ~$1.6 million rewarded to date.○ 27 critical, 641 high, 205 medium, 9 low paid.

○ ClusterFuzz + VRP○ 99 bugs from “Fuzzer Contribution Program”.○ Rewards upgraded in Aug 2013, Sep 2014

{based on clarity, exploitability, patch}.

ClusterFuzz + Cash

Page 35: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Fully reproducible andminimized testcases

Page 36: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Same bot configuration as crash○ Multi-threaded minimization based on Delta

Debugging○ Custom minimizers for some file types○ +Gesture minimization○ +Resource minimization○ +Tool settings correction (redzone {asan},

history size {tsan}, origins {msan}, etc).

Goal 2: Fully reproducible & minimized tests

Page 37: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Tokenize the input○ Generate hypotheses that certain groups of

tokens are not required for the crash○ Test hypotheses by running the test with the

tokens from the hypothesis removed○ If it crashes, removing them was fine○ If not, try breaking it into smaller groups

How does the minimizer work ?

Page 38: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Specialized tokenizers○ Generate hypothesis for groups of tokens that

can be removed together○ assertTrue(crash()) → crash()○ try { crash(); } catch(e) {} → crash()○ if (i_am_true) { crash(); } → crash()

Custom Minimizers

Page 39: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Resource Minimization

○ Problems○ Tons of tests {all over the web (ie, moz, etc.)}○ Dev complaints with local reproduction○ Testcase flakiness issues○ Platform issues with file system monitors

Page 40: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Resource Minimization

○ Solution○ --log-net-log command line switch○ Platform-independent resource dump at runtime○ Captures both local (file://) and remote loads (e.g. http

GET, POST).○ Example:: {"params":{"load_flags":67125248,"

method":"GET","priority":"LOW","url":"file:///Z:/test.js"},"phase":1,"source":{"id":178,"type":1},"time":"278568790","type":91},

Page 41: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

○ Stack trace with default redzone (128)==9485== ERROR: AddressSanitizer heap-use-after-free on address 0x7f8f653ff11e at pc 0x7f8f849fbb10 bp 0x7f8f5514a0a0 sp 0x7f8f5514a098READ of size 2 at 0x7f8f653ff11e thread T14 #0 0x7f8f849fbb10 in WTF::charactersToIntStrict(unsigned short const*, unsigned long, bool*, int) #1 0x7f8f8589d863 in WebCore::InlineTextBox::isLineBreak() const #2 0x7f8f858a771d in WebCore::InlineTextBox::containsCaretOffset(int)

○ Actual stack trace with bigger redzone (1024/2048)==14334== ERROR: AddressSanitizer heap-buffer-overflow on address 0x7f7e42b9b81c at pc 0x7f7e8f79a6ca bp 0x7f7e3cc30040 sp 0x7f7e3cc30038READ of size 2 at 0x7f7e42b9b81c thread T15#0 0x7f7e8f79a6ca in WebCore::InlineTextBox::isLineBreak() const#1 0x7f7e8f7abddd in WebCore::InlineTextBox::containsCaretOffset(int) const #2 0x7f7e8e06b19d in WebCore::Position::inRenderedText() const

Tool Settings Correction: ASAN example crbug.com/118662

Page 42: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Real-time regression andfixed testing

Page 43: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Goal 3: Real-time regression and fixed testing

○ Use LKGR builds archived on Google Cloud○ Account for bad builds / startup crashes○ Use a LOOK_BEHIND_WINDOW○ If previous step failed, then use binary bisect ○ Use FindIt to find culprit changelist

Page 44: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

FindIt: Culprit CL Finder

○ Manual owner triage is usually ….○ Slow○ Inaccurate○ Complex

○ from factors such as refactorings, size of regression range, etc

Page 45: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

FindIt: How it works

1. Parse the stacktrace

ThreadState.cpp (Index: 0, crashed line: 343)(Index: 1, crashed line: 357)(Index: 3, crashed line: 301)

Component: blink

Heap.cpp (Index: 2, crashed line: 1291) Component: blink

... ... ...

Page 46: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

2. Parse the changelog(s) in the regression range

FindIt: How it works

File Name CL

ThreadState.cpp 166624,166634

Heap.cpp 166624

WorkerThread.cpp 166624

ScrollbarTheme.cpp 166630

... ...

Page 47: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

3. Generate a list of suspected CLs, and sort / filter the results

FindIt: How it works

CL Reason

166624 Changes line 147 of WorkerThread.cppChanges line 301 of ThreadState.cppChanges file Heap.cpp

166634 Changes line 343 of TheadState.cpp

○ From the parsed stacktrace and changelogs

○ 166634 is the first result because:○ Both CLs change the crashed lines.○ 166634 changes line 343 of ThreadState.cpp, and the

crash on the line 343 happens at the top of the stack (0)○ Real culprit CL is…….166634!

Page 48: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

4. Show blame information if no results are available

FindIt: How it works

Stack frame index File Line Last revision

0 RenderBox.h 695 140640

1 RenderMedia.cpp 65 83397

... ... ... ...

Page 49: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

FindIt: How it worksFindIt: How it works

Page 50: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

ClusterFuzz: Sample

Page 51: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Testcase Report

Page 52: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

FindIt: Culprit CL Finder

Page 53: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Filed bug: crbug.com/430925

Page 54: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Patched + Verified: < 1 day

Page 55: ClusterFuzz - Nullcon · PDF fileClusterFuzz architect Fuzzer author and facilitator ... Glusterfs 1. Fuzzer data bundles 2. Build Cache 3. Code Coverage Appengine Local Storage 1

Thank you