⬢ DragonFlyBSD Kernel Audit
DF-5361 / run_matrix.sh
← back to finding ↓ download raw
#!/bin/sh
# run_matrix.sh -- baseline + per-fix A/B matrix for the verbatim pccard rig.
#
# Six rig variants are built from the SAME pristine extraction (sha256-gated
# by extract.sh):
#   baseline : unmodified production parser
#   f2319/f2320/f5361/f5362/f5363 : the single fix.diff applied to a COPY of
#                                   the extracted verbatim file (never /usr/src)
# then every scenario runs under every variant. One fix must flip exactly its
# own scenario(s) and leave everything else (incl. negatives) untouched.
set -eu
cd "$(dirname "$0")"

OUT=matrix.log
: > "$OUT"

log() { printf '%s\n' "$*" | tee -a "$OUT"; }

build_variant() { # name fixdiff|none
	_name=$1; _fix=$2
	rm -rf "var.$_name"
	mkdir -p "var.$_name/sys/bus/pccard"
	sh extract.sh "var.$_name" >> "$OUT" 2>&1
	cp "var.$_name/pccard_cis_core.inc" "var.$_name/core.orig"
	if [ "$_fix" != none ]; then
		cp "var.$_name/pccard_cis_core.inc" \
		   "var.$_name/sys/bus/pccard/pccard_cis.c"
		(cd "var.$_name" && patch -p1 --forward < "../$_fix") >> "$OUT" 2>&1
		cp "var.$_name/sys/bus/pccard/pccard_cis.c" \
		   "var.$_name/pccard_cis_core.inc"
		diff -u "var.$_name/core.orig" "var.$_name/pccard_cis_core.inc" \
		    > "var.$_name/applied_fix.diff" || true
		log "VARIANT $_name: fix applied ($(grep -c '^+' "var.$_name/applied_fix.diff") added lines)"
	fi
	cp rig_shims.h rig_main.c "var.$_name/"
	(cd "var.$_name" && cc -O2 -Wall -o rig rig_main.c) >> "$OUT" 2>&1
	log "VARIANT $_name: build OK"
}

run_variant() { # name
	_name=$1
	for _s in nullderef_a nullderef_b wildlink_long wildlink_mfc mfcleak \
		  livelock leakloop checksum checksum_ok benign; do
		log "===== variant=$_name scenario=$_s ====="
		"./var.$_name/rig" "$_s" >> "$OUT" 2>&1 || true
	done
	log "===== variant=$_name scenario=leakloop cap=100000 ====="
	RIG_CAP=100000 "./var.$_name/rig" leakloop >> "$OUT" 2>&1 || true
	log "===== variant=$_name scenario=livelock_alarm ====="
	"./var.$_name/rig" livelock_alarm >> "$OUT" 2>&1 || true
}

log "######## pccard verbatim-rig A/B matrix ########"
log "date: $(date)"
log "uname: $(uname -a)"

build_variant baseline none
build_variant f2319   fix_DF-2319.diff
build_variant f2320   fix_DF-2320.diff
build_variant f5361   fix_DF-5361.diff
build_variant f5362   fix_DF-5362.diff
build_variant f5363   fix_DF-5363.diff

run_variant baseline
run_variant f2319
run_variant f2320
run_variant f5361
run_variant f5362
run_variant f5363

log "######## matrix complete ########"
echo "DONE: $OUT"