91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/bin/bash -eu
 | |
| # Copyright 2018 Google Inc.
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #      http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| autoreconf -fi
 | |
| 
 | |
| libqb=`find /usr/lib/ -name libqb.a -print -quit`
 | |
| protobuf=`find /usr/lib/ -name libprotobuf.a -print -quit`
 | |
| 
 | |
| qb_LIBS="${libqb}" \
 | |
|   protobuf_LIBS="-pthread ${protobuf} -pthread -lpthread" \
 | |
|   ./configure --with-bundled-catch --with-bundled-pegtl \
 | |
|   --with-crypto-library=gcrypt --disable-shared
 | |
| 
 | |
| fuzzers="$( cd src/Tests/Fuzzers && find -name 'fuzzer-*.cpp' |
 | |
|            sed 's/^\.\/\(fuzzer-.*\)\.cpp$/\1/g' )"
 | |
| 
 | |
| make -j`nproc` src/build-config.h libusbguard.la
 | |
| make -j`nproc` -C src/Tests/Fuzzers ${fuzzers}
 | |
| 
 | |
| cd src/Tests/Fuzzers
 | |
| mv ${fuzzers} "$OUT"
 | |
| 
 | |
| ################################################################################
 | |
| # Create seed corpora.
 | |
| ################################################################################
 | |
| 
 | |
| # General case:
 | |
| cd "$SRC/usbguard/src/Tests/Fuzzers"
 | |
| # fuzzer-usb-descriptor seed corpus.
 | |
| for fuzzer_name in ${fuzzers}; do
 | |
|   corpus_dir="${fuzzer_name}_corpus"
 | |
|   if [[ ! -d "$corpus_dir" ]] ; then
 | |
|     continue
 | |
|   fi
 | |
|   zip_name="$OUT/${fuzzer_name}_seed_corpus.zip"
 | |
|   rm -f "${zip_name}"
 | |
|   zip -r "${zip_name}" "${corpus_dir}"
 | |
| done
 | |
| 
 | |
| # Specific cases:
 | |
| cd "$WORK"
 | |
| # fuzzer-rules seed corpus.
 | |
| fuzzer_name=fuzzer-rules
 | |
| corpus_dir="${fuzzer_name}_corpus"
 | |
| zip_name="$OUT/${fuzzer_name}_seed_corpus.zip"
 | |
| if [[ ! -d "$SRC/usbguard/src/Tests/Fuzzers/$corpus_dir" ]] ; then
 | |
|   rm -f "${zip_name}"
 | |
|   rm -rf "${corpus_dir}"
 | |
|   mkdir -p "${corpus_dir}"
 | |
|   pushd "${corpus_dir}"
 | |
|   i=1000000
 | |
|   while read -r line; do
 | |
|     echo "${line}" > "$((i++))"
 | |
|   done < <( cat $SRC/usbguard/src/Tests/Rules/test-rules.good \
 | |
|             $SRC/usbguard/src/Tests/Rules/test-rules.bad )
 | |
|   popd
 | |
|   zip -r "${zip_name}" "${corpus_dir}"
 | |
| fi
 | |
| 
 | |
| # fuzzer-usb-descriptor seed corpus.
 | |
| fuzzer_name=fuzzer-usb-descriptor
 | |
| corpus_dir="${fuzzer_name}_corpus"
 | |
| zip_name="$OUT/${fuzzer_name}_seed_corpus.zip"
 | |
| if [[ ! -d "$SRC/usbguard/src/Tests/Fuzzers/$corpus_dir" ]] ; then
 | |
|   rm -rf "${corpus_dir}"
 | |
|   rm -f "${zip_name}"
 | |
|   cp -R "$SRC/usbguard/src/Tests/USB/data" "${corpus_dir}"
 | |
|   zip -r "${zip_name}" "${corpus_dir}"
 | |
| fi
 | |
| 
 | |
| # Ubuntu 20.04 doesn't have a static libqb.
 | |
| mkdir -p $OUT/lib
 | |
| cp /lib/x86_64-linux-gnu/libqb* $OUT/lib
 | |
| patchelf --set-rpath '$ORIGIN/lib' $OUT/fuzzer-uevent
 | |
| patchelf --set-rpath '$ORIGIN/lib' $OUT/fuzzer-usb-descriptor
 | |
| patchelf --set-rpath '$ORIGIN/lib' $OUT/fuzzer-rules
 |