]> Git Repo - qemu.git/commitdiff
scripts/oss-fuzz: use hardlinks instead of copying
authorAlexander Bulekov <[email protected]>
Fri, 23 Oct 2020 15:07:45 +0000 (11:07 -0400)
committerThomas Huth <[email protected]>
Mon, 26 Oct 2020 08:53:54 +0000 (09:53 +0100)
Prior to this, fuzzers in the output oss-fuzz directory were exactly
the same executable, with a different name to do argv[0]-based
fuzz-target selection. This is a waste of space, especially since these
binaries can weigh many MB.

Instead of copying, use hard links, to cut down on wasted space. We need
to place the primary copy of the executable into DEST_DIR, since this is
a separate file-system on oss-fuzz. We should not place it directly into
$DEST_DIR, since oss-fuzz will treat it as an independent fuzzer and try
to run it for fuzzing. Instead, we create a DEST_DIR/bin directory to
store the primary copy.

Suggested-by: Darren Kenny <[email protected]>
Signed-off-by: Alexander Bulekov <[email protected]>
Message-Id: <20201023150746[email protected]>
Reviewed-by: Darren Kenny <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
scripts/oss-fuzz/build.sh

index 0c3ca9e06f02f15b4ad13d7a1aa22903a01d270a..0ce2867732d13d6a6b70837703df768b0624610e 100755 (executable)
@@ -62,6 +62,9 @@ fi
 
 mkdir -p "$DEST_DIR/lib/"  # Copy the shared libraries here
 
+mkdir -p "$DEST_DIR/bin/"  # Copy executables that shouldn't
+                           # be treated as fuzzers by oss-fuzz here
+
 # Build once to get the list of dynamic lib paths, and copy them over
 ../configure --disable-werror --cc="$CC" --cxx="$CXX" --enable-fuzzing \
     --prefix="$DEST_DIR" --bindir="$DEST_DIR" --datadir="$DEST_DIR/data/" \
@@ -88,13 +91,16 @@ make "-j$(nproc)" qemu-fuzz-i386 V=1
 # Copy over the datadir
 cp  -r ../pc-bios/ "$DEST_DIR/pc-bios"
 
+cp "./qemu-fuzz-i386" "$DEST_DIR/bin/"
+
 # Run the fuzzer with no arguments, to print the help-string and get the list
 # of available fuzz-targets. Copy over the qemu-fuzz-i386, naming it according
 # to each available fuzz target (See 05509c8e6d fuzz: select fuzz target using
 # executable name)
 for target in $(./qemu-fuzz-i386 | awk '$1 ~ /\*/  {print $2}');
 do
-    cp qemu-fuzz-i386 "$DEST_DIR/qemu-fuzz-i386-target-$target"
+    ln  "$DEST_DIR/bin/qemu-fuzz-i386" \
+        "$DEST_DIR/qemu-fuzz-i386-target-$target"
 done
 
 echo "Done. The fuzzers are located in $DEST_DIR"
This page took 0.0279 seconds and 4 git commands to generate.