Hello, </snip> > r420-1# rcctl -f start relayd > relayd(ok) > r420-1# uvm_fault(0xfffffd862f82f990, 0x0, 0, 1) -> e > kernel: page fault trap, code=0 > Stopped at pf_find_or_create_ruleset+0x1c: movb 0(%rdi),%al > TID PID UID PRFLAGS PFLAGS CPU COMMAND > 431388 19003 0 0x2 0 5 relayd > 174608 32253 89 0x1000012 0 2 relayd > 395415 12468 0 0x2 0 4 relayd > 493579 11904 0 0x2 0 3 relayd > *101082 14967 89 0x1100012 0 0K relayd > pf_find_or_create_ruleset(0) at pf_find_or_create_ruleset+0x1c > pfr_add_tables(832d7cca800,1,ffff800000eaf43c,10000000) at > pfr_add_tables+0x6ae > > pfioctl(4900,c450443d,ffff800000eaf000,3,ffff80002272e7f0) at pfioctl+0x1d9f > VOP_IOCTL(fffffd8551f82dd0,c450443d,ffff800000eaf000,3,fffffd862f7d60c0,ffff800 > 02272e7f0) at VOP_IOCTL+0x5c > vn_ioctl(fffffd855ecec1e8,c450443d,ffff800000eaf000,ffff80002272e7f0) at > vn_ioctl+0x75 > sys_ioctl(ffff80002272e7f0,ffff8000227d9980,ffff8000227d99d0) at > sys_ioctl+0x2c4 > syscall(ffff8000227d9a40) at syscall+0x374 > Xsyscall() at Xsyscall+0x128 > end of kernel
it looks like we are dying here at line 239 due to NULL pointer deference: 232 struct pf_ruleset * 233 pf_find_or_create_ruleset(const char *path) 234 { 235 char *p, *aname, *r; 236 struct pf_ruleset *ruleset; 237 struct pf_anchor *anchor; 238 239 if (path[0] == 0) 240 return (&pf_main_ruleset); 241 242 while (*path == '/') 243 path++; 244 I've followed the same steps to reproduce the issue to check if diff below resolves the issue. The bug has been introduced by my recent change to pf_table.c [1] from May 10th: Modified files: sys/net : pf_ioctl.c pf_table.c Log message: move memory allocations in pfr_add_tables() out of NET_LOCK()/PF_LOCK() scope. bluhm@ helped a lot to put this diff into shape. besides using a regression test I've also did simple testing using a 'load anchor': netlock# cat /tmp/anchor.conf load anchor "test" from "/tmp/pf.conf" netlock# netlock# cat /tmp/pf.conf table <try> { 192.168.1.1 } pass from <try> netlock# netlock# pfctl -sA test netlock# pfctl -a test -sT try netlock# pfctl -a test -t try -T show 192.168.1.1 OK to commit fix below? thanks and regards sashan [1] https://marc.info/?l=openbsd-cvs&m=165222430111103&w=2 --------8<---------------8<---------------8<------------------8<-------- diff --git a/sys/net/pf_table.c b/sys/net/pf_table.c index 8315ea5dd3a..dfc49de5efe 100644 --- a/sys/net/pf_table.c +++ b/sys/net/pf_table.c @@ -1628,8 +1628,7 @@ pfr_add_tables(struct pfr_table *tbl, int size, int *nadd, int flags) if (r != NULL) continue; - q->pfrkt_rs = pf_find_or_create_ruleset( - q->pfrkt_root->pfrkt_anchor); + q->pfrkt_rs = pf_find_or_create_ruleset(q->pfrkt_anchor); /* * root tables are attached to main ruleset, * because ->pfrkt_anchor[0] == '\0'