#!/bin/sh
# DF-2866 - run the pgtmark harness.
# Stage 1: kldload prints pagertab[0..7] (index 7 = OOB slot) -- harmless.
# Stage 2: sysctl vm.pgtmark_fire=1 dispatches an OBJT_MARKER object
#          through vm_pager_has_page() -> pagertab[7] wild indirect call.
#          EXPECT: kernel panic on the stock kernel.  Fixed kernel: returns
#          FALSE, "NO PANIC".
set -e
cd "$(dirname "$0")"
CFG=../../../dfbsd-qemu/config
SSH="ssh -F $CFG -o ConnectTimeout=8 -o BatchMode=yes dfbsd"

echo "== stage 1: load + dump pagertab =="
$SSH 'kldload /root/pgtmark/pgtmark.ko'
$SSH 'dmesg | tail -15'
echo "== stage 2: fire (expect panic on stock kernel) =="
$SSH 'sysctl vm.pgtmark_fire=1' || echo "(ssh died -- expected if panic)"
sleep 3
echo "== guest state =="
$SSH 'true' && echo "GUEST STILL UP (no panic?)" || echo "GUEST UNREACHABLE (likely panicked)"
