Re: [PATCH bpf-next 1/2] bpf, net: Support SO_REUSEPORT sockets with bpf_sk_assign

From: Martin KaFai Lau
Date: Fri May 26 2023 - 17:09:01 EST

On 5/25/23 7:49 PM, Kuniyuki Iwashima wrote:
We may want to use rcu_access_pointer(sk->sk_reuseport_cb) in
each lookup_reuseport() instead of adding sk_state check ?

And if someone has a weird program that creates multiple listeners and
disable SO_REUSEPORT for a listener that hits first in lhash2, checking
sk_reuseport_cb might not work ?

I am also not sure what the correct expectation is if the application disable SO_REUSEPORT in a sk after bind(). This is not something new or specific from the current patch though.

I hope no one does such though, checking sk_reuseport and sk_state could be better.

My previous comment on checking sk_state is to avoid the unnecessary inet_ehashfn() for the TCP_ESTABLISHED sk. Checking sk_reuseport_cb could also work since it should be NULL for established sk. However, not sure if it could be another cacheline access. The udp one is checking the sk_state also: "sk->sk_reuseport && sk->sk_state != TCP_ESTABLISHED".