#!/bin/sh
# DF-0754 run: deterministic harness proof — unpatched vs fixed contrast.
# Run as unprivileged user (maxx). No kernel module needed for the harness.
set -e
cd "$(dirname "$0")"

echo "============================================================"
echo "DF-0754 — mpls_output() by-value bug (manifestations 1 & 2)"
echo "  M1: mpls_output_process() error-path m_freem(stale)  DOUBLE-FREE/leak"
echo "  M2: ip_output() success-path if_output(stale)         stale/UAF-to-driver"
echo "  (M3 = mpls_forward() = DF-0753, already verified)"
echo "============================================================"

echo ""
echo ">>> UNPATCHED harness (transcribes kernel code verbatim):"
echo "    mpls_output(struct mbuf *m, ...) — m by VALUE"
echo "./harness"
echo "------------------------------------------------------------"
./harness

echo ""
echo "============================================================"
echo ">>> FIXED harness (mpls_output takes struct mbuf **mp):"
echo "./harness_fixed"
echo "------------------------------------------------------------"
./harness_fixed

echo ""
echo "============================================================"
echo "Contrast: UNPATCHED shows DOUBLE-FREE/LEAK/UAF in M1a/M1b/M1c/M2a/M2b;"
echo "          FIXED shows ALL PASS (zero double-free, zero UAF, zero leak)."
echo "============================================================"
