Re: FYI: AFL++ now builds a GCC plugin

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 06, 2024 at 01:46:28PM +0100, Florian Weimer wrote:
> * Richard W. M. Jones:
> 
> >   https://koji.fedoraproject.org/koji/taskinfo?taskID=113035034
> >   https://bugzilla.redhat.com/show_bug.cgi?id=2262539
> >
> > The new AFL++ (American Fuzzy Lop, a fuzzing tool) in Rawhide appears
> > to be building a GCC plugin, contained in one or all of these newly
> > added files:
> >
> >   %global afl_helper_path %{_libdir}/afl
> >   %{_bindir}/afl-gcc-fast
> >   %{_bindir}/afl-g++-fast
> >   %{afl_helper_path}/afl-gcc-cmplog-pass.so
> >   %{afl_helper_path}/afl-gcc-cmptrs-pass.so
> >   %{afl_helper_path}/afl-gcc-pass.so
> >   %{afl_helper_path}/afl-gcc-rt.o
> >   %{afl_helper_path}/injection-pass.so
> >
> > I'm going to guess this will introduce a dependency on the exact
> > version of GCC (major only? or major.minor? not sure).  Just like
> > annobin.  Which might require that this package is rebuilt when GCC is
> > rebuilt (only major? or all rebuilds? again, don't know).
> 
> It depends on what the plugin does.  Not all plugins are as sensitive to
> e.g. GCC options changes.  A precise NVR dependency might still make
> sense.  It's easier to pull off here because there's no cyclic
> dependency issue.

So I don't know how it works precisely, but this is my understanding
of what this all does ...

For fuzzing we want to produce an instrumented binary which, when run
on an input, traces the sequences of branches (ie. paths / basic
blocks) taken through the instrumented code.  The aim of the fuzzer is
to find new inputs which explore new paths in the code, until a crash
is found.

One way that AFL has done this traditionally is with an assembler
wrapper which munges the assembly output of the compiler, searching
and replacing branches with instrumentation code.  However this is
obviously very compiler / architecture specific.  In particular AFL
only implements this for GCC + x86_64, GCC + i686 (support dropped
recently, apparently by accident), and macOS + arm64.

AIUI the GCC (also LLVM) plugins replace this with some compiler
internal munging instead.  One advantage of this is it's not
architecture dependent any more, although we don't yet use this in
Fedora.

Also the compiler plugin is supposed to be faster.  However I have not
been troubled by the compilation speed of AFL.  And AIUI it makes no
difference to the run time speed of the binary, which is where faster
speed would really make the difference for fuzzing.

All of the above is based on my possibly faulty understanding.  Any
errors are yours to keep.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org
--
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux