On Sat, Sep 14, 2024 at 01:40:25PM +0200, Eric Dumazet wrote: > On Fri, Sep 13, 2024 at 11:39 AM Tiago Lam <tiagolam@xxxxxxxxxxxxxx> wrote: > > > > This follows the same rationale provided for the ipv4 counterpart, where > > it now runs a reverse socket lookup when source addresses and/or ports > > are changed, on sendmsg, to check whether egress traffic should be > > allowed to go through or not. > > > > As with ipv4, the ipv6 sendmsg path is also extended here to support the > > IPV6_ORIGDSTADDR ancilliary message to be able to specify a source > > address/port. > > > > Suggested-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> > > Signed-off-by: Tiago Lam <tiagolam@xxxxxxxxxxxxxx> > > --- > > net/ipv6/datagram.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > > net/ipv6/udp.c | 8 ++++-- > > 2 files changed, 82 insertions(+), 2 deletions(-) > > > > diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c > > index fff78496803d..4214dda1c320 100644 > > --- a/net/ipv6/datagram.c > > +++ b/net/ipv6/datagram.c > > @@ -756,6 +756,27 @@ void ip6_datagram_recv_ctl(struct sock *sk, struct msghdr *msg, > > } > > EXPORT_SYMBOL_GPL(ip6_datagram_recv_ctl); > > > > +static inline bool reverse_sk_lookup(struct flowi6 *fl6, struct sock *sk, > > + struct in6_addr *saddr, __be16 sport) > > +{ > > + if (static_branch_unlikely(&bpf_sk_lookup_enabled) && > > + (saddr && sport) && > > + (ipv6_addr_cmp(&sk->sk_v6_rcv_saddr, saddr) || inet_sk(sk)->inet_sport != sport)) { > > + struct sock *sk_egress; > > + > > + bpf_sk_lookup_run_v6(sock_net(sk), IPPROTO_UDP, &fl6->daddr, fl6->fl6_dport, > > + saddr, ntohs(sport), 0, &sk_egress); > > + if (!IS_ERR_OR_NULL(sk_egress) && > > + atomic64_read(&sk_egress->sk_cookie) == atomic64_read(&sk->sk_cookie)) > > I do not understand this. > > 1) sk_cookie is not always initialized. It is done on demand, when/if > __sock_gen_cookie() was called. > > 2) if sk1 and sk2 share the same sk_cookie, then sk1 == sk2 ??? > > So why not simply testing sk_egress == sk ? > Oh, yes, you're right. I'll include this in my next revision, thanks.