On Thu, Jun 30, 2022 at 06:41:01PM -0700, Jakub Kicinski wrote: > From: Eric Dumazet <edumazet@xxxxxxxxxx> > > commit 6f0012e35160cd08a53e46e3b3bbf724b92dfe68 upstream. > > When the third packet of 3WHS connection establishment > contains payload, it is added into socket receive queue > without the XFRM check and the drop of connection tracking > context. > > This means that if the data is left unread in the socket > receive queue, conntrack module can not be unloaded. > > As most applications usually reads the incoming data > immediately after accept(), bug has been hiding for > quite a long time. > > Commit 68822bdf76f1 ("net: generalize skb freeing > deferral to per-cpu lists") exposed this bug because > even if the application reads this data, the skb > with nfct state could stay in a per-cpu cache for > an arbitrary time, if said cpu no longer process RX softirqs. > > Many thanks to Ilya Maximets for reporting this issue, > and for testing various patches: > https://lore.kernel.org/netdev/20220619003919.394622-1-i.maximets@xxxxxxx/ > > Note that I also added a missing xfrm4_policy_check() call, > although this is probably not a big issue, as the SYN > packet should have been dropped earlier. > > Fixes: b59c270104f0 ("[NETFILTER]: Keep conntrack reference until IPsec policy checks are done") > Reported-by: Ilya Maximets <i.maximets@xxxxxxx> > Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx> > Cc: Florian Westphal <fw@xxxxxxxxx> > Cc: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> > Cc: Steffen Klassert <steffen.klassert@xxxxxxxxxxx> > Tested-by: Ilya Maximets <i.maximets@xxxxxxx> > Reviewed-by: Ilya Maximets <i.maximets@xxxxxxx> > Link: https://lore.kernel.org/r/20220623050436.1290307-1-edumazet@xxxxxxxxxx > Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> > --- > net/ipv4/tcp_ipv4.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) Now queued up, thanks. greg k-h