On Thu, Jan 7, 2021 at 12:11 AM Baptiste Lepers <baptiste.lep...@gmail.com> wrote: > > reuse->socks[] is modified concurrently by reuseport_add_sock. To > prevent reading values that have not been fully initialized, only read > the array up until the last known safe index instead of incorrectly > re-reading the last index of the array. > > Fixes: acdcecc61285f ("udp: correct reuseport selection with connected > sockets") > Signed-off-by: Baptiste Lepers <baptiste.lep...@gmail.com>
Acked-by: Willem de Bruijn <will...@google.com> Thanks. This also matches local variable socks as used to calculate i and j with reciprocal_scale immediately above. Please mark fixes [PATCH net] in the future. > --- > net/core/sock_reuseport.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/core/sock_reuseport.c b/net/core/sock_reuseport.c > index bbdd3c7b6cb5..b065f0a103ed 100644 > --- a/net/core/sock_reuseport.c > +++ b/net/core/sock_reuseport.c > @@ -293,7 +293,7 @@ struct sock *reuseport_select_sock(struct sock *sk, > i = j = reciprocal_scale(hash, socks); > while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) { > i++; > - if (i >= reuse->num_socks) > + if (i >= socks) > i = 0; > if (i == j) > goto out; > -- > 2.17.1 >