Re: [PATCH net-next v2 5/5] lwtunnel: Limit number of recursions on output to 5
On 11/01/16 at 12:52pm, kbuild test robot wrote: > Hi Thomas, > > [auto build test ERROR on net-next/master] > > url: > https://github.com/0day-ci/linux/commits/Thomas-Graf/bpf-BPF-for-lightweight-tunnel-encapsulation/20161101-084038 > config: arm64-allmodconfig (attached as .config) > compiler: aarch64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705 > reproduce: > wget > https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross > -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # save the attached .config to linux build tree > make.cross ARCH=arm64 > > All errors (new ones prefixed by >>): > >net/built-in.o: In function `bpf_output': > >> ncsi-manage.c:(.text+0x8e9f4): undefined reference to > >> `ip6_route_output_flags' Needs depends on IPV6_MULTIPLE_TABLES || IPV6=n Compile testing with IPV6=y and IPV6_MULTIPLE_TABLES=n would have been great. I'll submit a v3 after some time has passed to review the new rerouting bits.
Re: [PATCH net-next v2 5/5] lwtunnel: Limit number of recursions on output to 5
Hi Thomas, [auto build test ERROR on net-next/master] url: https://github.com/0day-ci/linux/commits/Thomas-Graf/bpf-BPF-for-lightweight-tunnel-encapsulation/20161101-084038 config: arm64-allmodconfig (attached as .config) compiler: aarch64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=arm64 All errors (new ones prefixed by >>): net/built-in.o: In function `bpf_output': >> ncsi-manage.c:(.text+0x8e9f4): undefined reference to >> `ip6_route_output_flags' --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: application/gzip
[PATCH net-next v2 5/5] lwtunnel: Limit number of recursions on output to 5
Signed-off-by: Thomas Graf--- net/core/lwtunnel.c | 14 +- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/net/core/lwtunnel.c b/net/core/lwtunnel.c index 554d901..6363d0b 100644 --- a/net/core/lwtunnel.c +++ b/net/core/lwtunnel.c @@ -231,6 +231,10 @@ int lwtunnel_cmp_encap(struct lwtunnel_state *a, struct lwtunnel_state *b) } EXPORT_SYMBOL(lwtunnel_cmp_encap); +/* Per CPU recursion counter for dst_output() redirections via LWT */ +#define DST_RECURSION_LIMIT 5 +DEFINE_PER_CPU(int, dst_recursion); + int lwtunnel_output(struct net *net, struct sock *sk, struct sk_buff *skb) { struct dst_entry *dst = skb_dst(skb); @@ -246,11 +250,19 @@ int lwtunnel_output(struct net *net, struct sock *sk, struct sk_buff *skb) lwtstate->type > LWTUNNEL_ENCAP_MAX) return 0; + if (unlikely(__this_cpu_read(dst_recursion) > DST_RECURSION_LIMIT)) { + net_crit_ratelimited("lwt: recursion limit reached of redirected dst_output calls\n"); + return -EFAULT; + } + ret = -EOPNOTSUPP; rcu_read_lock(); ops = rcu_dereference(lwtun_encaps[lwtstate->type]); - if (likely(ops && ops->output)) + if (likely(ops && ops->output)) { + __this_cpu_inc(dst_recursion); ret = ops->output(net, sk, skb); + __this_cpu_dec(dst_recursion); + } rcu_read_unlock(); if (ret == -EOPNOTSUPP) -- 2.7.4