On Mon, Oct 09, 2017 at 02:35:46PM +0200, Daniel Borkmann wrote: > On 10/09/2017 02:27 PM, Shmulik Ladkani wrote: > >From: Shmulik Ladkani <shmulik.ladkani@xxxxxxxxx> > > > >Commit 2c16d6033264 ("netfilter: xt_bpf: support ebpf") introduced > >support for attaching an eBPF object by an fd, with the > >'bpf_mt_check_v1' ABI expecting the '.fd' to be specified upon each > >IPT_SO_SET_REPLACE call. > > > >However this breaks subsequent iptables calls: > > > > # iptables -A INPUT -m bpf --object-pinned /sys/fs/bpf/xxx -j ACCEPT > > # iptables -A INPUT -s 5.6.7.8 -j ACCEPT > > iptables: Invalid argument. Run `dmesg' for more information. > > > >That's because iptables works by loading exising rules using > >IPT_SO_GET_ENTRIES to userspace, then issuing IPT_SO_SET_REPLACE with > >the replacement set. > > > >However, the loaded 'xt_bpf_info_v1' has an arbitrary '.fd' number > >(from the initial "iptables -m bpf" invocation) - so when 2nd invocation > >occurs, userspace passes a bogus fd number, which leads to > >'bpf_mt_check_v1' to fail. > > > >One suggested solution [1] was to hack iptables userspace, to perform a > >"entries fixup" immediatley after IPT_SO_GET_ENTRIES, by opening a new, > >process-local fd per every 'xt_bpf_info_v1' entry seen. > > > >However, in [2] both Pablo Neira Ayuso and Willem de Bruijn suggested to > >depricate the xt_bpf_info_v1 ABI dealing with pinned ebpf objects. > > > >This fix changes the XT_BPF_MODE_FD_PINNED behavior to ignore the given > >'.fd' and instead perform an in-kernel lookup for the bpf object given > >the provided '.path'. > > > >It also defines an alias for the XT_BPF_MODE_FD_PINNED mode, named > >XT_BPF_MODE_PATH_PINNED, to better reflect the fact that the user is > >expected to provide the path of the pinned object. > > > >Existing XT_BPF_MODE_FD_ELF behavior (non-pinned fd mode) is preserved. > > > >References: [1] https://marc.info/?l=netfilter-devel&m=150564724607440&w=2 > > [2] https://marc.info/?l=netfilter-devel&m=150575727129880&w=2 > > > >Cc: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> > >Cc: Willem de Bruijn <willemb@xxxxxxxxxx> > >Reported-by: Rafael Buchbinder <rafi@xxxxxx> > >Signed-off-by: Shmulik Ladkani <shmulik.ladkani@xxxxxxxxx> > > Acked-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx> Applied, thanks everyone. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html