]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net/smc: Do not re-initialize smc hashtables
authorAlexandra Winter <wintera@linux.ibm.com>
Thu, 21 May 2026 14:56:39 +0000 (16:56 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 23 May 2026 00:38:02 +0000 (17:38 -0700)
INIT_HLIST_HEAD(&smc_v*_hashinfo.ht) are called after smc_nl_init(),
proto_register() and sock_register(). This can lead to smc_v*_hashinfo.ht
being reset even though hash entries already exist and are being used,
possibly resulting in a corrupted list.

Remove unnecessary and dangerous re-initialisation of smc_v*_hashinfo.ht in
smc_init(); it is implicitly initialised to zero anyhow. Add
HLIST_HEAD_INIT to the definitions for clarity.

Fixes: f16a7dd5cf27 ("smc: netlink interface for SMC sockets")
Suggested-by: Halil Pasic <pasic@linux.ibm.com>
Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
Acked-by: Halil Pasic <pasic@linux.ibm.com>
Reviewed-by: Mahanta Jambigi <mjambigi@linux.ibm.com>
Link: https://patch.msgid.link/20260521145639.10317-1-wintera@linux.ibm.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/smc/af_smc.c

index dffbd529762d6b8bed6da0b0e9ef73b52d3783ac..b5db69073e20fc409c142a902c07be369cea6cb4 100644 (file)
@@ -188,10 +188,12 @@ static bool smc_hs_congested(const struct sock *sk)
 
 struct smc_hashinfo smc_v4_hashinfo = {
        .lock = __RW_LOCK_UNLOCKED(smc_v4_hashinfo.lock),
+       .ht = HLIST_HEAD_INIT,
 };
 
 struct smc_hashinfo smc_v6_hashinfo = {
        .lock = __RW_LOCK_UNLOCKED(smc_v6_hashinfo.lock),
+       .ht = HLIST_HEAD_INIT,
 };
 
 int smc_hash_sk(struct sock *sk)
@@ -3517,8 +3519,6 @@ static int __init smc_init(void)
                pr_err("%s: sock_register fails with %d\n", __func__, rc);
                goto out_proto6;
        }
-       INIT_HLIST_HEAD(&smc_v4_hashinfo.ht);
-       INIT_HLIST_HEAD(&smc_v6_hashinfo.ht);
 
        rc = smc_ib_register_client();
        if (rc) {