On Wednesday, 2020-08-19 at 02:11:05 -04, Alexander Bulekov wrote:
> On oss-fuzz we need some sort of wrapper to specify command-line
> arguments or environment variables. When we had a similar problem with
> other targets that I fixed with
> 05509c8e6d ("fuzz: select fuzz target using executable name")
> by selecting the fuzz target based on the executable's name. In the
> future should probably commit to one approach (wrapper binary or
> argv0-based target selection).
>
> Signed-off-by: Alexander Bulekov <[email protected]>Reviewed-by: Darren Kenny <[email protected]> > --- > scripts/oss-fuzz/target.c | 40 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > create mode 100644 scripts/oss-fuzz/target.c > > diff --git a/scripts/oss-fuzz/target.c b/scripts/oss-fuzz/target.c > new file mode 100644 > index 0000000000..4a7257412a > --- /dev/null > +++ b/scripts/oss-fuzz/target.c > @@ -0,0 +1,40 @@ > +/* > + * Copyright Red Hat Inc., 2020 > + * > + * Authors: > + * Alexander Bulekov <[email protected]> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <limits.h> > +#include <libgen.h> > +#include <string.h> > +#include <unistd.h> > + > + > +/* Required for oss-fuzz to consider the binary a target. */ > +static const char *magic __attribute__((used)) = "LLVMFuzzerTestOneInput"; > +static const char args[] = {QEMU_FUZZ_ARGS, 0x00}; > +static const char objects[] = {QEMU_FUZZ_OBJECTS, 0x00}; > + > +int main(int argc, char *argv[]) > +{ > + char path[PATH_MAX] = {0}; > + char *dir = dirname(argv[0]); > + strncpy(path, dir, PATH_MAX); > + strcat(path, "/deps/qemu-fuzz-i386-target-general-fuzz"); > + > + setenv("QEMU_FUZZ_ARGS", args, 0); > + setenv("QEMU_FUZZ_OBJECTS", objects, 0); > + > + argv[0] = path; > + int ret = execvp(path, argv); > + if (ret) { > + perror("execv"); > + } > + return ret; > +} > -- > 2.27.0
