⬢ DragonFlyBSD Kernel Audit
DF-4690 / fix_validate.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-4690 / DF-4691 fix validation (guest).
# Applies each fix to a copy of the pristine guest cardbus_cis.c,
# re-extracts the (patched) decoder bodies verbatim, rebuilds and
# re-runs the harness.
# Success criteria:
#   fix4690: modes 1/2/3 -> decode_tuple_bar returns EINVAL, the
#            resource_list_add count is never set (sentinel intact)
#   fix4691: mode 4 -> the mismatched nid tuple is ignored (nid stays
#            zeroed) and 1<<type is guarded
set -e
cd /root/cb4690

extract() {
	awk '
	  !f && /^decode_tuple_funce\(device_t/ { print prev; f=1 }
	  f { print; if ($0 ~ /^}$/) { exit } }
	  { prev = $0 }
	' "$1" > cardbus_extracted.inc
	awk '
	  !f && /^decode_tuple_bar\(device_t/ { print prev; f=1 }
	  f { print; if ($0 ~ /^}$/) { exit } }
	  { prev = $0 }
	' "$1" >> cardbus_extracted.inc
	cc -O2 -Wall -o cardbus_harness_fixed cardbus_harness.c
	echo FIXED_BUILD_OK
}

echo "===== fix4690 (BAR size sanity) ====="
cp cardbus_src.c cardbus_fixed.c
patch -p1 cardbus_fixed.c < fix4690.diff
echo PATCHES_APPLIED
extract cardbus_fixed.c
echo "--- PATCHED modes 1/2/3 (expect: counts never set = sentinel 0x42424242) ---"
./cardbus_harness_fixed 0 | head -8

echo "===== fix4691 (funce nid length must match tuple) ====="
cp cardbus_src.c cardbus_fixed.c
patch -p1 cardbus_fixed.c < fix4691.diff
echo PATCHES_APPLIED
extract cardbus_fixed.c
echo "--- PATCHED mode 4 (expect: nid stays 00:00:00:00:00:00, fepresent unshifted-beyond-32) ---"
./cardbus_harness_fixed 4