summaryrefslogtreecommitdiff
path: root/net/tipc/crypto.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2025-08-06 10:08:54 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2025-08-06 10:08:54 -0700
commitab93e0dd72c37d378dd936f031ffb83ff2bd87ce (patch)
tree4e5ed022e3c48cedd519954e4fb529dac0240c94 /net/tipc/crypto.c
parentbcce05041b21888f10b80ea903dcfe51a25c586e (diff)
parent4f67c41894674d351a4b4e7dd3471380b71b5bb3 (diff)
Merge branch 'next' into for-linus
Prepare input updates for 6.17 merge window.
Diffstat (limited to 'net/tipc/crypto.c')
-rw-r--r--net/tipc/crypto.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c
index c524421ec652..ea5bb131ebd0 100644
--- a/net/tipc/crypto.c
+++ b/net/tipc/crypto.c
@@ -425,7 +425,7 @@ static void tipc_aead_free(struct rcu_head *rp)
}
free_percpu(aead->tfm_entry);
kfree_sensitive(aead->key);
- kfree(aead);
+ kfree_sensitive(aead);
}
static int tipc_aead_users(struct tipc_aead __rcu *aead)
@@ -817,12 +817,20 @@ static int tipc_aead_encrypt(struct tipc_aead *aead, struct sk_buff *skb,
goto exit;
}
+ /* Get net to avoid freed tipc_crypto when delete namespace */
+ if (!maybe_get_net(aead->crypto->net)) {
+ tipc_bearer_put(b);
+ rc = -ENODEV;
+ goto exit;
+ }
+
/* Now, do encrypt */
rc = crypto_aead_encrypt(req);
if (rc == -EINPROGRESS || rc == -EBUSY)
return rc;
tipc_bearer_put(b);
+ put_net(aead->crypto->net);
exit:
kfree(ctx);
@@ -860,6 +868,7 @@ static void tipc_aead_encrypt_done(void *data, int err)
kfree(tx_ctx);
tipc_bearer_put(b);
tipc_aead_put(aead);
+ put_net(net);
}
/**