]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
tcp: Decrement tcp_md5_needed static branch
authorDmitry Safonov <0x7f454c46@gmail.com>
Thu, 25 Jun 2026 18:21:41 +0000 (19:21 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 30 Jun 2026 01:14:30 +0000 (18:14 -0700)
In case of early freeing an unwanted TCP-MD5 key on TCP-AO connect(),
md5sig_info is freed right away (and set to NULL). Later, at
the moment of socket destruction, the static branch counter
is not getting decremented.

Add a missing decrement for TCP-MD5 static branch.

Reported-by: Qihang <q.h.hack.winter@gmail.com>
Fixes: 0aadc73995d0 ("net/tcp: Prevent TCP-MD5 with TCP-AO being set")
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Safonov <0x7f454c46@gmail.com>
Link: https://patch.msgid.link/20260625-tcp-md5-connect-v3-3-1fd313d6c1e0@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/tcp_output.c

index bc03809ca3af764becf3254d95b04ba0e05024ac..d7c1444b5e304b296bba3b58feef270735e57981 100644 (file)
@@ -4334,8 +4334,8 @@ int tcp_connect(struct sock *sk)
                        tcp_clear_md5_list(sk);
                        md5sig = rcu_replace_pointer(tp->md5sig_info, NULL,
                                                     lockdep_sock_is_held(sk));
-                       if (md5sig)
-                               kfree_rcu(md5sig, rcu);
+                       kfree_rcu(md5sig, rcu);
+                       static_branch_slow_dec_deferred(&tcp_md5_needed);
                }
        }
 #endif