Hello, it looks like we need to use goto fail instead of return. this is the diff I'm testing now.
--------8<---------------8<---------------8<------------------8<-------- diff --git a/sys/net/pf_ioctl.c b/sys/net/pf_ioctl.c index 36779cfdfd3..a51df9e6089 100644 --- a/sys/net/pf_ioctl.c +++ b/sys/net/pf_ioctl.c @@ -1508,11 +1508,15 @@ pfioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p) int i; t = pf_find_trans(minor(dev), pr->ticket); - if (t == NULL) - return (ENXIO); + if (t == NULL) { + error = ENXIO; + goto fail; + } KASSERT(t->pft_unit == minor(dev)); - if (t->pft_type != PF_TRANS_GETRULE) - return (EINVAL); + if (t->pft_type != PF_TRANS_GETRULE) { + error = EINVAL; + goto fail; + } NET_LOCK(); PF_LOCK(); On Wed, Jun 28, 2023 at 02:38:00PM +0200, Alexander Bluhm wrote: > Hi, > > Since Jun 26 regress tests panic the kernel. > > panic: rw_enter: pfioctl_rw locking against myself > Stopped at db_enter+0x14: popq %rbp > TID PID UID PRFLAGS PFLAGS CPU COMMAND > * 19846 58589 0 0x2 0 1K pfctl > 343161 43899 0 0x2 0 2 perl > db_enter() at db_enter+0x14 > panic(ffffffff820e7d9d) at panic+0xc3 > rw_enter(ffffffff82462c60,1) at rw_enter+0x26f > pfioctl(24900,cd504407,ffff800000f4b000,1,ffff80002226adc0) at pfioctl+0x2da > VOP_IOCTL(fffffd827bfea6e0,cd504407,ffff800000f4b000,1,fffffd827f7e3bc8,ffff80002226adc0) > at VOP_IOCTL+0x60 > vn_ioctl(fffffd823b841d20,cd504407,ffff800000f4b000,ffff80002226adc0) at > vn_ioctl+0x79 > sys_ioctl(ffff80002226adc0,ffff800022458160,ffff8000224581c0) at > sys_ioctl+0x2c4 > syscall(ffff800022458230) at syscall+0x3d4 > Xsyscall() at Xsyscall+0x128 > end of kernel > end trace frame: 0x77becbc54dd0, count: 6 > https://www.openbsd.org/ddb.html describes the minimum info required in bug > reports. Insufficient info makes it difficult to find and fix bugs. > ddb{1}> > > Triggered by regress/sbin/pfctl > > ==== pfload ==== > ... > /sbin/pfctl -o none -a regress -f - < /usr/src/regress/sbin/pfctl/pf90.in > /sbin/pfctl -o none -a 'regress/*' -gvvsr | sed -e > 's/__automatic_[0-9a-f]*_/__automatic_/g' | diff -u > /usr/src/regress/sbin/pfctl/pf90.loaded /dev/stdin > /sbin/pfctl -o none -a regress -Fr >/dev/null 2>&1 > /sbin/pfctl -o none -a regress -f - < /usr/src/regress/sbin/pfctl/pf91.in > /sbin/pfctl -o none -a 'regress/*' -gvvsr | sed -e > 's/__automatic_[0-9a-f]*_/__automatic_/g' | diff -u > /usr/src/regress/sbin/pfctl/pf91.loaded /dev/stdin > Timeout, server ot6 not responding. > > bluhm >