Aaron Bieber writes:
> Hi, > > Adding a rule similar to the below causes a panic on -current (OpenBSD > 6.5-current (GENERIC) #95: Thu Jul 4 21:22:25 MDT 2019). This also panics 6.3 > and 6.5 (I didn't test 6.4): > > pass in quick on egress proto tcp from any to port 8888 once rdr-to \ > 127.0.0.1 port 3333 > > Once the rule is in place, fire up: > > nc -l 127.0.0.1 3333 > > Connect a few times from a remote machine: > > nc <ip> 8888 > > Eventually it will panic with (sometimes it happens right away, other times I > have to restart nc a few times): > This is because it's meant to be used inside of an anchor (it removes the rule once it's matched). The most sensible way to use it is to put it into the anchor inside a recursive anchor (e.g. 'relayd/*'). It's possible that the check protecting the system from the misuse like you've described here got lost during refactoring or it never existed in the first place :-( Cheers, Mike > ddb> trace > pf_rm_rule(ffffffff81d900a8,ffff8000003bbfe8) at pf_rm_rule+0xa9 > pf_purge_rule(ffff8000003bbfe8) at pf_purge_rule+0x26 > pf_purge(ffffffff81dc1088) at pf_purge+0x55 > taskq_thread(ffff800000022040) at taskq_thread+0x3d > end trace frame: 0x0, count: -4 > ddb> > ddb> ps > PID TID PPID UID S FLAGS WAIT COMMAND > 69502 12189 1 0 3 0x100083 ttyin ksh > 53972 340673 1 0 3 0x100098 poll cron > 81827 279222 1 110 3 0x100090 poll sndiod > 54852 68160 1 99 3 0x100090 poll sndiod > 79474 94554 3215 95 3 0x100092 kqread smtpd > 90212 164878 3215 103 3 0x100092 kqread smtpd > 43199 482512 3215 95 3 0x100092 kqread smtpd > 38765 100663 3215 95 3 0x100092 kqread smtpd > 33241 424770 3215 95 3 0x100092 kqread smtpd > 5338 193750 3215 95 3 0x100092 kqread smtpd > 3215 481909 1 0 3 0x100080 kqread smtpd > 57742 143403 1 0 3 0x80 select sshd > 31904 460143 1 0 3 0x100080 poll ntpd > 65592 182120 47006 83 3 0x100092 poll ntpd > 47006 103509 1 83 3 0x100092 poll ntpd > 60875 292765 99617 74 3 0x100092 bpf pflogd > 99617 524148 1 0 3 0x80 netio pflogd > 4242 324170 49064 73 3 0x100090 kqread syslogd > 49064 413359 1 0 3 0x100082 netio syslogd > 20955 102995 68995 115 3 0x100092 kqread slaacd > 99883 518930 68995 115 3 0x100092 kqread slaacd > 68995 175540 1 0 3 0x100080 kqread slaacd > 5278 238159 0 0 3 0x14200 pgzero zerothread > 2253 479921 0 0 3 0x14200 aiodoned aiodoned > 98149 310276 0 0 3 0x14200 syncer update > 78055 259911 0 0 3 0x14200 cleaner cleaner > 68827 324781 0 0 3 0x14200 reaper reaper > 93269 98863 0 0 3 0x14200 pgdaemon pagedaemon > 75284 447451 0 0 3 0x14200 bored crynlk > 34868 513191 0 0 3 0x14200 bored crypto > *18776 255193 0 0 7 0x14200 softnet > 64918 469356 0 0 3 0x14200 bored systqmp > 902 49537 0 0 3 0x14200 bored systq > 17250 200730 0 0 3 0x40014200 bored softclock > 2990 510299 0 0 3 0x40014200 idle0 > 947 215447 0 0 3 0x14200 bored smr > 1 180680 0 0 3 0x82 wait init > 0 0 -1 0 3 0x10200 scheduler swapper > ddb> > > dmesg (from a VM in vmm - I have also reproduced this on physical hw): > OpenBSD 6.5-current (GENERIC) #95: Thu Jul 4 21:22:25 MDT 2019 > dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC > real mem = 4278181888 (4079MB) > avail mem = 4138524672 (3946MB) > mpath0 at root > scsibus0 at mpath0: 256 targets > mainbus0 at root > bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xf3f10 (12 entries) > bios0: vendor SeaBIOS version "1.11.0p2-OpenBSD-vmm" date 01/01/2011 > bios0: OpenBSD VMM > acpi at bios0 not configured > cpu0 at mainbus0: (uniprocessor) > cpu0: AMD Ryzen 7 PRO 2700U w/ Radeon Vega Mobile Gfx, 37466.79 MHz, 17-11-00 > cpu0: > FPU,VME,DE,PSE,TSC,MSR,PAE,CX8,SEP,PGE,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,MMXX,FFXSR,PAGE1GB,LONG,LAHF,CMPLEG,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,SKINIT,TCE,TOPEXT,CPCTR,DBKP,PCTRL3,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,RDSEED,ADX,SMAP,CLFLUSHOPT,SHA > cpu0: 64KB 64b/line 4-way I-cache, 32KB 64b/line 8-way D-cache, 512KB > 64b/line 8-way L2 cache, 4MB 64b/line 16-way L3 cache > cpu0: ITLB 64 4KB entries fully associative, 64 4MB entries fully associative > cpu0: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative > pvbus0 at mainbus0: OpenBSD > pvclock0 at pvbus0 > pci0 at mainbus0 bus 0 > pchb0 at pci0 dev 0 function 0 "OpenBSD VMM Host" rev 0x00 > virtio0 at pci0 dev 1 function 0 "Qumranet Virtio RNG" rev 0x00 > viornd0 at virtio0 > virtio0: irq 3 > virtio1 at pci0 dev 2 function 0 "Qumranet Virtio Network" rev 0x00 > vio0 at virtio1: address fe:e1:bb:d1:eb:4d > virtio1: irq 5 > virtio2 at pci0 dev 3 function 0 "Qumranet Virtio Storage" rev 0x00 > vioblk0 at virtio2 > scsibus1 at vioblk0: 2 targets > sd0 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, > SCSI3 0/direct fixed > sd0: 40960MB, 512 bytes/sector, 83886080 sectors > virtio2: irq 6 > virtio3 at pci0 dev 4 function 0 "OpenBSD VMM Control" rev 0x00 > vmmci0 at virtio3 > virtio3: irq 7 > isa0 at mainbus0 > isadma0 at isa0 > com0 at isa0 port 0x3f8/8 irq 4: ns8250, no fifo > com0: console > vscsi0 at root > scsibus2 at vscsi0: 256 targets > softraid0 at root > scsibus3 at softraid0: 256 targets > root on sd0a (66c460169c410440.a) swap on sd0b dump on sd0b > WARNING: / was not properly unmounted