[llvm-dev] libfuzzer questions
Brian Cain via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 11 17:51:46 PDT 2015
On Tue, Aug 11, 2015 at 7:25 PM, Kostya Serebryany <kcc at google.com> wrote:
> ...
>> So if I'm seeing tens of thousands of distinct test files, that
>> represents tens of thousands of distinct edges?
>>
>
> In the extreme case -- yes.
> However usually a single file covers more than one unique edge.
> Also, if you are running the fuzzer in parallel (-jobs=N) some edges can
> be discovered many times.
> ...
>
> With -fsanitize-coverage=indirect-calls it will also track indir call
> edges (uniq pairs of caller-callee).
>
>>
Ok, I think the parallel jobs and unique caller/callee pairs must be where
it got amped up a bit. I'm using "bb,indirect-calls,8bit-counters".
> save_minimized_corpus 0 If 1, the minimized corpus is
>>> saved into the first input directory
>>> -------------
>>>
>>>>
>> Ohh, ok. I think I misunderstood this to trying to minimize the size of
>> the test case while still reproducing a crash. Similar to how afl-tmin
>> works, I was thinking. I'll give this a try.
>>
>> Should I only use this option periodically or can I run it this way all
>> the time? Do we end up spending more execution time minimizing the
>> corpus? Will it delete redundant test cases, including ones that were
>> there before this test run started?
>>
>
> You should only use this option if you want to store the minimized corpus
> somewhere,
>
Ok, so I can do it periodically to prune the test corpus. That's great.
> or if the initial stage (between "#0 READ" and "#1331 INITED")
> takes too long.
> Otherwise you should not bother since libFuzzer minimizes the corpus in
> memory on every run.
> (minimization is done with a trivial greedy algorithm, not even close to
> really minimal solution, but good enough).
> The output looks like this:
>
> #0 READ cov 0 bits 0 units 1331 exec/s 0
> ...
> #1024 pulse cov 8043 bits 13474 units 1331 exec/s 256
> #1331 INITED cov 8050 bits 13689 units 594 exec/s 221
> #2048 pulse cov 8050 bits 13689 units 594 exec/s 341
>
> This means that the corpus on disk had 1331 units, they were read,
> shuffled, executed, and those that added coverage were chosen.
>
>>
Hah! this means I've been misreading this line all along. My eyes zoomed
in on "N exec/s" and I assumed that was the throughput (and I just ignored
the "suffix" entry). So it's "cov X" / "bits Y" / "units Z" / "exec/s W"
? I guess the PCRE2 use case in the docs explains some of this -- I
should've read this more closely.
...
Aha, of course.
> I run non-async-signal-safe code in the signal handler, bummer.
> Let me try to fix this (no promises for a quick fix, I'll be out for a
> while).
>
>>
Ok, no problem. If you don't get around to it I can probably come up w/a
fix.
--
-Brian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150811/e83738bf/attachment.html>
More information about the llvm-dev
mailing list