⬢ DragonFlyBSD Kernel Audit
DF-3502 / enablers.sh
← back to finding ↓ download raw
#!/bin/sh
# Lab enabler patcher for DF-3502 verification (guest-side).
# E1 (DF-3499 fix): guard bcopy(NULL,...,0) in ng_fec_get_unit
# E2: rmnode skips ng_fec_stop (unbalanced ifnet_deserialize_all -> INVARIANTS panic)
# E3: delport serializes member around if_ioctl (vtnet_serialize_assert panic)
# E1/E2/E3 are *verification enablers only*; E2/E3 facets are filed as DF-3500.
set -e
cd /usr/src/sys/netgraph/fec

if [ "$(grep -c 'if (ng_fec_units != NULL)' ng_fec.c)" = "1" ]; then
	patch -s < /tmp/fix_df3499.diff && echo E1_APPLIED
else
	echo E1_present
fi

grep -q "LAB ENABLER" ng_fec.c || {
	sed -i "" "s|^\tng_fec_stop(&priv->arpcom.ac_if);|\t/* ng_fec_stop(\&priv->arpcom.ac_if); LAB ENABLER E2 */|" ng_fec.c
	echo E2_APPLIED
}

grep -q "LAB ENABLER E3" ng_fec.c || {
	sed -i "" "s|^\tbifp->if_flags \&= ~IFF_UP;$|\tbifp->if_flags \&= ~IFF_UP; /* E3 */|" ng_fec.c
	sed -i "" "s|^\tbifp->if_ioctl(bifp, SIOCSIFFLAGS, NULL, NULL);$|\tifnet_serialize_all(bifp); bifp->if_ioctl(bifp, SIOCSIFFLAGS, NULL, NULL); ifnet_deserialize_all(bifp); /* LAB ENABLER E3 */|" ng_fec.c
	echo E3_APPLIED
}

echo guards: e1=$(grep -c "if (ng_fec_units != NULL)" ng_fec.c) e2=$(grep -c "LAB ENABLER E2" ng_fec.c) e3=$(grep -c "LAB ENABLER E3" ng_fec.c)
make 2>&1 | tail -1