DF-4691 / fix_validate.sh
#!/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 |