[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241204221254.3537932-1-sbrivio@redhat.com>
Date: Wed, 4 Dec 2024 23:12:52 +0100
From: Stefano Brivio <sbrivio@...hat.com>
To: Willem de Bruijn <willemdebruijn.kernel@...il.com>
Cc: Eric Dumazet <edumazet@...gle.com>,
netdev@...r.kernel.org,
Kuniyuki Iwashima <kuniyu@...zon.com>,
Mike Manning <mvrmanning@...il.com>,
David Gibson <david@...son.dropbear.id.au>,
Paul Holzinger <pholzing@...hat.com>,
Philo Lu <lulie@...ux.alibaba.com>,
Cambda Zhu <cambda@...ux.alibaba.com>,
Fred Chen <fred.cc@...baba-inc.com>,
Yubing Qiu <yubing.qiuyubing@...baba-inc.com>
Subject: [PATCH net-next 0/2] Fix race between datagram socket address change and rehash
Patch 2/2 fixes a race condition in the lookup of datagram sockets
between address change (triggered by connect()) and rehashing. The
issue occurs regardless of the type of hash, that is, it happens with
updates to the secondary hash as well as to the newly introduced
four-tuple hash.
Patch 1/2 is a small optimisation to simplify 2/2.
This is essentially a rebase onto current net-next of the RFC I
originally posted against 'net', before the 6.13 merge window,
at:
https://lore.kernel.org/netdev/20241114215414.3357873-1-sbrivio@redhat.com/
with a couple of minor changes described in the single patch messages.
The rebase is not trivial as four-tuple hashes were introduced
meanwhile, with commits 1b29a730ef8b ("ipv6/udp: Add 4-tuple hash for
connected socket"), 78c91ae2c6de ("ipv4/udp: Add 4-tuple hash for
connected socket"), and their dependencies, but the race condition,
described in detail in the commit message for 1/2, is exactly the same
as before.
Stefano Brivio (2):
datagram: Rehash sockets only if local address changed for their
family
datagram, udp: Set local address and rehash socket atomically against
lookup
include/net/inet_hashtables.h | 13 ++++++
include/net/sock.h | 2 +-
include/net/udp.h | 3 +-
net/core/sock.c | 12 ++++-
net/ipv4/datagram.c | 7 +--
net/ipv4/inet_hashtables.c | 13 ------
net/ipv4/udp.c | 84 +++++++++++++++++++++++------------
net/ipv4/udp_impl.h | 2 +-
net/ipv4/udplite.c | 2 +-
net/ipv6/datagram.c | 30 +++++++++----
net/ipv6/udp.c | 31 +++++++------
net/ipv6/udp_impl.h | 2 +-
net/ipv6/udplite.c | 2 +-
13 files changed, 130 insertions(+), 73 deletions(-)
--
2.40.1
Powered by blists - more mailing lists