Hey, group.
A thought came to me: is it really the best thing to panic when errors are
encountered within pf? I understand there are situations where it is safer for
the kernel to not continue running like some low-level operations in memory
allocator or filesystems. But a firewall? Especially that a firewall handles
packets coming from the Interent which can be arbitrarily crafted.
root:freebsd.git/ (releng/11.1) # git grep panic sys/netpfil/pf/
[11:25:04]
sys/netpfil/pf/if_pfsync.c: panic("%s: unable to find deferred state",
__func__);
sys/netpfil/pf/if_pfsync.c: panic("%s: unexpected sync state %d",
__func__, st->sync_state);
sys/netpfil/pf/if_pfsync.c: panic("%s: unexpected sync state %d",
__func__, st->sync_state);
sys/netpfil/pf/if_pfsync.c: panic("%s: unexpected sync state %d",
__func__, st->sync_state);
sys/netpfil/pf/in4_cksum.c: panic("in4_cksum: offset too
short");
sys/netpfil/pf/in4_cksum.c: panic("in4_cksum: bad mbuf
chain");
sys/netpfil/pf/pf.c:panic("%s: unknown address family %u",
__func__, af);
sys/netpfil/pf/pf.c:panic("%s: unknown address family %u",
__func__, af);
sys/netpfil/pf/pf.c:panic("%s: dir %u", __func__, dir);
sys/netpfil/pf/pf.c:panic("%s: unknown type", __func__);
sys/netpfil/pf/pf.c:panic("%s: unsupported af %d", __func__, af);
sys/netpfil/pf/pf_lb.c: * prefixes (or even IPv4) would cause a
panic.
sys/netpfil/pf/pf_lb.c: panic("%s: unknown action %u", __func__, r-
>action);
sys/netpfil/pf/pf_table.c: panic("%s: unknown address family %u",
__func__, af);
That is 14 places in pf code. Wouldn't it be safer to just drop the packet if
it can not be processed?
--
| pozdrawiam / greetings | powered by Debian, FreeBSD and CentOS |
| Kajetan Staszkiewicz | jabber,email: vegeta()tuxpowered net |
|Vegeta | www: http://vegeta.tuxpowered.net |
`^---'
signature.asc
Description: This is a digitally signed message part.