On 24 Apr 2021, at 15:18, Kristof Provost wrote:
On 24 Apr 2021, at 14:12, Florian Smeets wrote:
On 10.04.21 11:16, Kristof Provost wrote:
The branch main has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=5c11c5a3655842a176124ef2334fcdf830422c8a

commit 5c11c5a3655842a176124ef2334fcdf830422c8a
Author:     Kristof Provost <[email protected]>
AuthorDate: 2021-03-12 17:03:14 +0000
Commit:     Kristof Provost <[email protected]>
CommitDate: 2021-04-10 09:16:01 +0000

     pfctl: Move to DIOCADDRULENV
         Start using the new nvlist based ioctl to add rules.
         MFC after:      4 weeks
     Sponsored by:   Rubicon Communications, LLC ("Netgate")
     Differential Revision:  https://reviews.freebsd.org/D29558

Hi Kristof,

this commit breaks my previously working rule set. Using a pfctl from before this commit works with a kernel from yesterdays sources.

This is the smallest rule set I could come up with. It doesn't matter whether I use macros in the list or not. The int_if stuff is only there to not lock myself out of the system.

It looks like lists with more than 5 IPv6 host or 6 v4 hosts don't work.

int_if="em0"
set skip on $int_if

# not working with pfctl after 5c11c5a3655842a176124ef2334fcdf830422c8a # each one of the rules below causes "pfctl: DIOCADDRULENV: Invalid argument" on its own pass in proto tcp to { fd01::1, fd01::2, fd01::3, fd01::4, fd01::5, fd01::6 } port ssh pass in proto tcp to { 192.168.0.1, 192.168.0.2, 192.168.0.4, 192.168.0.4, 192.168.0.5, 192.168.0.6, 192.168.0.7 } port ssh

# working fine with pfctl after 5c11c5a3655842a176124ef2334fcdf830422c8a pass in proto tcp to { fd01::1, fd01::2, fd01::3, fd01::4, fd01::5 } port ssh pass in proto tcp to { 192.168.0.1, 192.168.0.2, 192.168.0.4, 192.168.0.4, 192.168.0.5, 192.168.0.6 } port ssh

Another interesting point is the following rules work with -o none, but not with -o basic, which I guess points to list or maybe table handling?

pass in proto tcp to 192.168.0.1 port ssh
pass in proto tcp to 192.168.0.2 port ssh
pass in proto tcp to 192.168.0.3 port ssh
pass in proto tcp to 192.168.0.4 port ssh
pass in proto tcp to 192.168.0.5 port ssh
pass in proto tcp to 192.168.0.6 port ssh
pass in proto tcp to 192.168.0.7 port ssh

I think you should be able to reproduce this easily, if you need anything else, please let me know.

Yeah, I see what’s happening here. The optimiser creates an automatic table, and the table name is longer than IFNAMSIZ. That’s fine, because it’s stored in a union that has tblname, which I sufficiently long for that name. The problem is that the nvlist code unconditionally reads the ifname as well, and the automatic name is longer than IFNAMSIZ. It’s a simple matter of (a) cursing the old pf data structures for being awful and (b) only reading ifname (or tblname) for the appropriate addr type.

I’m testing a patch now.

https://reviews.freebsd.org/D29962

Best regards,
Kristof
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to