* [bpf PATCH v2 0/2] bpf, sockmap IPv6/TCP state fixes
@ 2018-06-08 15:06 John Fastabend
2018-06-08 15:06 ` [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added John Fastabend
2018-06-08 15:06 ` [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state John Fastabend
0 siblings, 2 replies; 7+ messages in thread
From: John Fastabend @ 2018-06-08 15:06 UTC (permalink / raw)
To: edumazet, weiwan, daniel, ast; +Cc: netdev
ULP are only valid with TCP in ESTABLISHED states. Sockmap was not
following this rule so add a fix to only allow ESTABLISHED states to
be added from the userspace side. On the BPF side we continue to allow
adding sockets to maps from sock_ops events, but only events that are
triggered when entering the ESTABLISHED state. This blocks users from
adding sockets to maps that will not be in the correct TCP state.
Also we stomped on the tcpv6_prot pointer overwriting with the
tcp_prot. This was discovered by syzbot (thanks!) and not found by
selftests because we only have local tests in selftest so even with
ipv6 selftests we did not trigger the splat.
Will follow up with IPv6 tests for selftest regardless it seems like
a miss to not have any IPv6 selftests.
Also these need to go to stable. There will be a small conflict on
the second patch where we add check to the sockhash update function
which did not exist until recently.
---
John Fastabend (2):
bpf: sockmap, fix crash when ipv6 sock is added
bpf: sockmap only allow ESTABLISHED sock state
kernel/bpf/sockmap.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 52 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread* [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added 2018-06-08 15:06 [bpf PATCH v2 0/2] bpf, sockmap IPv6/TCP state fixes John Fastabend @ 2018-06-08 15:06 ` John Fastabend 2018-06-11 23:14 ` Daniel Borkmann 2018-06-08 15:06 ` [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state John Fastabend 1 sibling, 1 reply; 7+ messages in thread From: John Fastabend @ 2018-06-08 15:06 UTC (permalink / raw) To: edumazet, weiwan, daniel, ast; +Cc: netdev This fixes a crash where we assign tcp_prot to IPv6 sockets instead of tcpv6_prot. Previously we overwrote the sk->prot field with tcp_prot even in the AF_INET6 case. This patch ensures the correct tcp_prot and tcpv6_prot are used. Further, only allow ESTABLISHED connections to join the map per note in TLS ULP, /* The TLS ulp is currently supported only for TCP sockets * in ESTABLISHED state. * Supporting sockets in LISTEN state will require us * to modify the accept implementation to clone rather then * share the ulp context. */ Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as 'netperf -H [IPv4]'. The ESTABLISHED check resolves the previously crashing case here. Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support") Reported-by: syzbot+5c063698bdbfac19f363@syzkaller.appspotmail.com Signed-off-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: Wei Wang <weiwan@google.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> --- kernel/bpf/sockmap.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c index 52a91d8..fa9b7f3 100644 --- a/kernel/bpf/sockmap.c +++ b/kernel/bpf/sockmap.c @@ -41,6 +41,7 @@ #include <linux/mm.h> #include <net/strparser.h> #include <net/tcp.h> +#include <net/transp_v6.h> #include <linux/ptr_ring.h> #include <net/inet_common.h> #include <linux/sched/signal.h> @@ -140,6 +141,7 @@ static int bpf_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, static int bpf_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size); static int bpf_tcp_sendpage(struct sock *sk, struct page *page, int offset, size_t size, int flags); +static void bpf_tcp_close(struct sock *sk, long timeout); static inline struct smap_psock *smap_psock_sk(const struct sock *sk) { @@ -162,6 +164,8 @@ static bool bpf_tcp_stream_read(const struct sock *sk) } static struct proto tcp_bpf_proto; +static struct proto tcpv6_bpf_proto; + static int bpf_tcp_init(struct sock *sk) { struct smap_psock *psock; @@ -181,14 +185,30 @@ static int bpf_tcp_init(struct sock *sk) psock->save_close = sk->sk_prot->close; psock->sk_proto = sk->sk_prot; + if (sk->sk_family == AF_INET6) { + tcpv6_bpf_proto = *sk->sk_prot; + tcpv6_bpf_proto.close = bpf_tcp_close; + } else { + tcp_bpf_proto = *sk->sk_prot; + tcp_bpf_proto.close = bpf_tcp_close; + } + if (psock->bpf_tx_msg) { + tcpv6_bpf_proto.sendmsg = bpf_tcp_sendmsg; + tcpv6_bpf_proto.sendpage = bpf_tcp_sendpage; + tcpv6_bpf_proto.recvmsg = bpf_tcp_recvmsg; + tcpv6_bpf_proto.stream_memory_read = bpf_tcp_stream_read; tcp_bpf_proto.sendmsg = bpf_tcp_sendmsg; tcp_bpf_proto.sendpage = bpf_tcp_sendpage; tcp_bpf_proto.recvmsg = bpf_tcp_recvmsg; tcp_bpf_proto.stream_memory_read = bpf_tcp_stream_read; } - sk->sk_prot = &tcp_bpf_proto; + if (sk->sk_family == AF_INET6) + sk->sk_prot = &tcpv6_bpf_proto; + else + sk->sk_prot = &tcp_bpf_proto; + rcu_read_unlock(); return 0; } @@ -1111,8 +1131,6 @@ static void bpf_tcp_msg_add(struct smap_psock *psock, static int bpf_tcp_ulp_register(void) { - tcp_bpf_proto = tcp_prot; - tcp_bpf_proto.close = bpf_tcp_close; /* Once BPF TX ULP is registered it is never unregistered. It * will be in the ULP list for the lifetime of the system. Doing * duplicate registers is not a problem. ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added 2018-06-08 15:06 ` [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added John Fastabend @ 2018-06-11 23:14 ` Daniel Borkmann 2018-06-12 13:57 ` John Fastabend 0 siblings, 1 reply; 7+ messages in thread From: Daniel Borkmann @ 2018-06-11 23:14 UTC (permalink / raw) To: John Fastabend, edumazet, weiwan, ast; +Cc: netdev Hi John, On 06/08/2018 05:06 PM, John Fastabend wrote: > This fixes a crash where we assign tcp_prot to IPv6 sockets instead > of tcpv6_prot. > > Previously we overwrote the sk->prot field with tcp_prot even in the > AF_INET6 case. This patch ensures the correct tcp_prot and tcpv6_prot > are used. Further, only allow ESTABLISHED connections to join the > map per note in TLS ULP, > > /* The TLS ulp is currently supported only for TCP sockets > * in ESTABLISHED state. > * Supporting sockets in LISTEN state will require us > * to modify the accept implementation to clone rather then > * share the ulp context. > */ > > Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as > 'netperf -H [IPv4]'. The ESTABLISHED check resolves the previously > crashing case here. > > Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support") > Reported-by: syzbot+5c063698bdbfac19f363@syzkaller.appspotmail.com > Signed-off-by: John Fastabend <john.fastabend@gmail.com> > Signed-off-by: Wei Wang <weiwan@google.com> [...] Still one question for some more clarification below that popped up while review: > @@ -162,6 +164,8 @@ static bool bpf_tcp_stream_read(const struct sock *sk) > } > > static struct proto tcp_bpf_proto; > +static struct proto tcpv6_bpf_proto; These two are global, w/o locking. > static int bpf_tcp_init(struct sock *sk) > { > struct smap_psock *psock; > @@ -181,14 +185,30 @@ static int bpf_tcp_init(struct sock *sk) > psock->save_close = sk->sk_prot->close; > psock->sk_proto = sk->sk_prot; > > + if (sk->sk_family == AF_INET6) { > + tcpv6_bpf_proto = *sk->sk_prot; > + tcpv6_bpf_proto.close = bpf_tcp_close; > + } else { > + tcp_bpf_proto = *sk->sk_prot; > + tcp_bpf_proto.close = bpf_tcp_close; > + } And each time we add a BPF ULP to a v4/v6 socket, we override tcp{,v6}_bpf_proto from scratch. > if (psock->bpf_tx_msg) { > + tcpv6_bpf_proto.sendmsg = bpf_tcp_sendmsg; > + tcpv6_bpf_proto.sendpage = bpf_tcp_sendpage; > + tcpv6_bpf_proto.recvmsg = bpf_tcp_recvmsg; > + tcpv6_bpf_proto.stream_memory_read = bpf_tcp_stream_read; > tcp_bpf_proto.sendmsg = bpf_tcp_sendmsg; > tcp_bpf_proto.sendpage = bpf_tcp_sendpage; > tcp_bpf_proto.recvmsg = bpf_tcp_recvmsg; > tcp_bpf_proto.stream_memory_read = bpf_tcp_stream_read; > } > > - sk->sk_prot = &tcp_bpf_proto; > + if (sk->sk_family == AF_INET6) > + sk->sk_prot = &tcpv6_bpf_proto; > + else > + sk->sk_prot = &tcp_bpf_proto; Where every active socket would be affected from it as well. Isn't that generally racy? E.g. existing ones where tcpv6_bpf_proto.sendmsg points to bpf_tcp_sendmsg would get overridden with earlier assignment on the tcpv6_bpf_proto = *sk->sk_prot during their lifetime after bpf_tcp_init(). In the kTLS case, the v4 protos are built up in module init via tls_register() and never change from there. The v6 ones are only reloaded when their addr changes e.g. module reload would come to mind, which should only be possible once no active v6 socket is present. What speaks against adapting similar scheme resp. what am I missing that the above would work? (Would be nice if there was some discussion in commit log related to it on 'why' this approach was done differently.) Thanks, Daniel > rcu_read_unlock(); > return 0; > } > @@ -1111,8 +1131,6 @@ static void bpf_tcp_msg_add(struct smap_psock *psock, > > static int bpf_tcp_ulp_register(void) > { > - tcp_bpf_proto = tcp_prot; > - tcp_bpf_proto.close = bpf_tcp_close; > /* Once BPF TX ULP is registered it is never unregistered. It > * will be in the ULP list for the lifetime of the system. Doing > * duplicate registers is not a problem. > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added 2018-06-11 23:14 ` Daniel Borkmann @ 2018-06-12 13:57 ` John Fastabend 0 siblings, 0 replies; 7+ messages in thread From: John Fastabend @ 2018-06-12 13:57 UTC (permalink / raw) To: Daniel Borkmann, edumazet, weiwan, ast; +Cc: netdev On 06/11/2018 04:14 PM, Daniel Borkmann wrote: > Hi John, > > On 06/08/2018 05:06 PM, John Fastabend wrote: >> This fixes a crash where we assign tcp_prot to IPv6 sockets instead >> of tcpv6_prot. >> >> Previously we overwrote the sk->prot field with tcp_prot even in the >> AF_INET6 case. This patch ensures the correct tcp_prot and tcpv6_prot >> are used. Further, only allow ESTABLISHED connections to join the >> map per note in TLS ULP, >> >> /* The TLS ulp is currently supported only for TCP sockets >> * in ESTABLISHED state. >> * Supporting sockets in LISTEN state will require us >> * to modify the accept implementation to clone rather then >> * share the ulp context. >> */ >> >> Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as >> 'netperf -H [IPv4]'. The ESTABLISHED check resolves the previously >> crashing case here. >> >> Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support") >> Reported-by: syzbot+5c063698bdbfac19f363@syzkaller.appspotmail.com >> Signed-off-by: John Fastabend <john.fastabend@gmail.com> >> Signed-off-by: Wei Wang <weiwan@google.com> > [...] > > Still one question for some more clarification below that popped up while > review: > >> @@ -162,6 +164,8 @@ static bool bpf_tcp_stream_read(const struct sock *sk) >> } >> >> static struct proto tcp_bpf_proto; >> +static struct proto tcpv6_bpf_proto; > > These two are global, w/o locking. > >> static int bpf_tcp_init(struct sock *sk) >> { >> struct smap_psock *psock; >> @@ -181,14 +185,30 @@ static int bpf_tcp_init(struct sock *sk) >> psock->save_close = sk->sk_prot->close; >> psock->sk_proto = sk->sk_prot; >> >> + if (sk->sk_family == AF_INET6) { >> + tcpv6_bpf_proto = *sk->sk_prot; >> + tcpv6_bpf_proto.close = bpf_tcp_close; >> + } else { >> + tcp_bpf_proto = *sk->sk_prot; >> + tcp_bpf_proto.close = bpf_tcp_close; >> + } > > And each time we add a BPF ULP to a v4/v6 socket, we override tcp{,v6}_bpf_proto > from scratch. > >> if (psock->bpf_tx_msg) { >> + tcpv6_bpf_proto.sendmsg = bpf_tcp_sendmsg; >> + tcpv6_bpf_proto.sendpage = bpf_tcp_sendpage; >> + tcpv6_bpf_proto.recvmsg = bpf_tcp_recvmsg; >> + tcpv6_bpf_proto.stream_memory_read = bpf_tcp_stream_read; >> tcp_bpf_proto.sendmsg = bpf_tcp_sendmsg; >> tcp_bpf_proto.sendpage = bpf_tcp_sendpage; >> tcp_bpf_proto.recvmsg = bpf_tcp_recvmsg; >> tcp_bpf_proto.stream_memory_read = bpf_tcp_stream_read; >> } >> >> - sk->sk_prot = &tcp_bpf_proto; >> + if (sk->sk_family == AF_INET6) >> + sk->sk_prot = &tcpv6_bpf_proto; >> + else >> + sk->sk_prot = &tcp_bpf_proto; > > Where every active socket would be affected from it as well. Isn't that > generally racy? E.g. existing ones where tcpv6_bpf_proto.sendmsg points > to bpf_tcp_sendmsg would get overridden with earlier assignment on the > tcpv6_bpf_proto = *sk->sk_prot during their lifetime after bpf_tcp_init(). > In general yes. At best it does feel fragile. > In the kTLS case, the v4 protos are built up in module init via tls_register() > and never change from there. The v6 ones are only reloaded when their addr > changes e.g. module reload would come to mind, which should only be possible > once no active v6 socket is present. What speaks against adapting similar > scheme resp. what am I missing that the above would work? (Would be nice if > there was some discussion in commit log related to it on 'why' this approach > was done differently.) I think its best to use the same scheme. Will post a new version. Also would be nice to fix the selftests in the same series. Finally, I set these pointers lazily adding a sendmsg hook for example even if it not needed. Its harmless but does create an extra call through bpf for no reason on some socks. To be complete we should avoid that. > > Thanks, > Daniel > >> rcu_read_unlock(); >> return 0; >> } >> @@ -1111,8 +1131,6 @@ static void bpf_tcp_msg_add(struct smap_psock *psock, >> >> static int bpf_tcp_ulp_register(void) >> { >> - tcp_bpf_proto = tcp_prot; >> - tcp_bpf_proto.close = bpf_tcp_close; >> /* Once BPF TX ULP is registered it is never unregistered. It >> * will be in the ULP list for the lifetime of the system. Doing >> * duplicate registers is not a problem. >> > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state 2018-06-08 15:06 [bpf PATCH v2 0/2] bpf, sockmap IPv6/TCP state fixes John Fastabend 2018-06-08 15:06 ` [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added John Fastabend @ 2018-06-08 15:06 ` John Fastabend 2018-06-09 20:51 ` Daniel Borkmann 2018-06-09 21:53 ` John Fastabend 1 sibling, 2 replies; 7+ messages in thread From: John Fastabend @ 2018-06-08 15:06 UTC (permalink / raw) To: edumazet, weiwan, daniel, ast; +Cc: netdev Per the note in the TLS ULP (which is actually a generic statement regarding ULPs) /* The TLS ulp is currently supported only for TCP sockets * in ESTABLISHED state. * Supporting sockets in LISTEN state will require us * to modify the accept implementation to clone rather then * share the ulp context. */ After this patch we only allow socks that are in ESTABLISHED state or are being added via a sock_ops event that is transitioning into an ESTABLISHED state. By allowing sock_ops events we allow users to manage sockmaps directly from sock ops programs. The two supported sock_ops ops are BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB and BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB. Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as 'netperf -H [IPv4]'. Reported-by: Eric Dumazet <edumazet@google.com> Signed-off-by: John Fastabend <john.fastabend@gmail.com> --- kernel/bpf/sockmap.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c index fa9b7f3..4921fb7 100644 --- a/kernel/bpf/sockmap.c +++ b/kernel/bpf/sockmap.c @@ -1956,8 +1956,12 @@ static int sock_map_update_elem(struct bpf_map *map, return -EINVAL; } + /* ULPs are currently supported only for TCP sockets in ESTABLISHED + * state. + */ if (skops.sk->sk_type != SOCK_STREAM || - skops.sk->sk_protocol != IPPROTO_TCP) { + skops.sk->sk_protocol != IPPROTO_TCP || + skops.sk->sk_state != TCP_ESTABLISHED) { fput(socket->file); return -EOPNOTSUPP; } @@ -2318,6 +2322,16 @@ static int sock_hash_update_elem(struct bpf_map *map, return -EINVAL; } + /* ULPs are currently supported only for TCP sockets in ESTABLISHED + * state. + */ + if (skops.sk->sk_type != SOCK_STREAM || + skops.sk->sk_protocol != IPPROTO_TCP || + skops.sk->sk_state != TCP_ESTABLISHED) { + fput(socket->file); + return -EOPNOTSUPP; + } + err = sock_hash_ctx_update_elem(&skops, map, key, flags); fput(socket->file); return err; @@ -2403,10 +2417,23 @@ struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key) .map_delete_elem = sock_hash_delete_elem, }; +static bool bpf_is_valid_sock(struct bpf_sock_ops_kern *ops) +{ + return ops->op == BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB || + ops->op == BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB; +} + BPF_CALL_4(bpf_sock_map_update, struct bpf_sock_ops_kern *, bpf_sock, struct bpf_map *, map, void *, key, u64, flags) { WARN_ON_ONCE(!rcu_read_lock_held()); + + /* ULPs are currently supported only for TCP sockets in ESTABLISHED + * state. This checks that the sock ops triggering the update is + * one indicating we are (or will be soon) in an ESTABLISHED state. + */ + if (!bpf_is_valid_sock(bpf_sock)) + return -EOPNOTSUPP; return sock_map_ctx_update_elem(bpf_sock, map, key, flags); } @@ -2425,6 +2452,9 @@ struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key) struct bpf_map *, map, void *, key, u64, flags) { WARN_ON_ONCE(!rcu_read_lock_held()); + + if (!bpf_is_valid_sock(bpf_sock)) + return -EOPNOTSUPP; return sock_hash_ctx_update_elem(bpf_sock, map, key, flags); } ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state 2018-06-08 15:06 ` [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state John Fastabend @ 2018-06-09 20:51 ` Daniel Borkmann 2018-06-09 21:53 ` John Fastabend 1 sibling, 0 replies; 7+ messages in thread From: Daniel Borkmann @ 2018-06-09 20:51 UTC (permalink / raw) To: John Fastabend, edumazet, weiwan, ast; +Cc: netdev Hi John, On 06/08/2018 05:06 PM, John Fastabend wrote: > Per the note in the TLS ULP (which is actually a generic statement > regarding ULPs) > > /* The TLS ulp is currently supported only for TCP sockets > * in ESTABLISHED state. > * Supporting sockets in LISTEN state will require us > * to modify the accept implementation to clone rather then > * share the ulp context. > */ > > After this patch we only allow socks that are in ESTABLISHED state or > are being added via a sock_ops event that is transitioning into an > ESTABLISHED state. By allowing sock_ops events we allow users to > manage sockmaps directly from sock ops programs. The two supported > sock_ops ops are BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB and > BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB. > > Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as > 'netperf -H [IPv4]'. > > Reported-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: John Fastabend <john.fastabend@gmail.com> Please also add a Fixes tag to this one. Ok to just reply with one. Thanks, Daniel ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state 2018-06-08 15:06 ` [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state John Fastabend 2018-06-09 20:51 ` Daniel Borkmann @ 2018-06-09 21:53 ` John Fastabend 1 sibling, 0 replies; 7+ messages in thread From: John Fastabend @ 2018-06-09 21:53 UTC (permalink / raw) To: daniel, ast; +Cc: edumazet, weiwan, netdev On 06/08/2018 08:06 AM, John Fastabend wrote: > Per the note in the TLS ULP (which is actually a generic statement > regarding ULPs) > > /* The TLS ulp is currently supported only for TCP sockets > * in ESTABLISHED state. > * Supporting sockets in LISTEN state will require us > * to modify the accept implementation to clone rather then > * share the ulp context. > */ > > After this patch we only allow socks that are in ESTABLISHED state or > are being added via a sock_ops event that is transitioning into an > ESTABLISHED state. By allowing sock_ops events we allow users to > manage sockmaps directly from sock ops programs. The two supported > sock_ops ops are BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB and > BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB. > > Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as > 'netperf -H [IPv4]'. > > Reported-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: John Fastabend <john.fastabend@gmail.com> > --- Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support") ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-06-12 13:57 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-08 15:06 [bpf PATCH v2 0/2] bpf, sockmap IPv6/TCP state fixes John Fastabend 2018-06-08 15:06 ` [bpf PATCH v2 1/2] bpf: sockmap, fix crash when ipv6 sock is added John Fastabend 2018-06-11 23:14 ` Daniel Borkmann 2018-06-12 13:57 ` John Fastabend 2018-06-08 15:06 ` [bpf PATCH v2 2/2] bpf: sockmap only allow ESTABLISHED sock state John Fastabend 2018-06-09 20:51 ` Daniel Borkmann 2018-06-09 21:53 ` John Fastabend
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox