HomeFreeBSD

pf: Initialize pf_kpool mutexes earlier

Description

pf: Initialize pf_kpool mutexes earlier

There are some error paths in ioctl handlers that will call
pf_krule_free() before the rule's rpool.mtx field is initialized,
causing a panic with INVARIANTS enabled.

Fix the problem by introducing pf_krule_alloc() and initializing the
mutex there. This does mean that the rule->krule and pool->kpool
conversion functions need to stop zeroing the input structure, but I
don't see a nicer way to handle this except perhaps by guarding the
mtx_destroy() with a mtx_initialized() check.

Constify some related functions while here and add a regression test
based on a syzkaller reproducer.

Reported by: syzbot+77cd12872691d219c158@syzkaller.appspotmail.com
Reviewed by: kp
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D34115

Details

Provenance
markjAuthored on Jan 31 2022, 9:14 PM
Reviewer
kp
Differential Revision
D34115: pf: Initialize pf_kpool mutexes earlier
Parents
rGb4cc5d63b611: bhyve/virtio: use correct device id for virtio-scsi
Branches
Unknown
Tags
Unknown