summaryrefslogtreecommitdiff
path: root/net/tls/tls_main.c
diff options
context:
space:
mode:
authorBenjamin Tissoires <bentiss@kernel.org>2024-07-16 12:19:28 +0200
committerBenjamin Tissoires <bentiss@kernel.org>2024-07-16 12:19:28 +0200
commit3c69140734a27f8b145f12fa0ae80c1fe36a02ca (patch)
treead36bf7e6a5400212fbf917eceb4c7ad4df5d557 /net/tls/tls_main.c
parent5ba28be6be8ac6cd4fa1ac67cd4da237d39917d2 (diff)
parent8a25418ba65a5d2494b369f6178a284c449bc399 (diff)
Merge branch 'for-6.11/trivial' into for-linus
Couple of trivial fixes: - extra semicolon (Chen Ni) - typo (Thorsten Blum)
Diffstat (limited to 'net/tls/tls_main.c')
-rw-r--r--net/tls/tls_main.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
index b4674f03d71a..90b7f253d363 100644
--- a/net/tls/tls_main.c
+++ b/net/tls/tls_main.c
@@ -816,9 +816,17 @@ struct tls_context *tls_ctx_create(struct sock *sk)
return NULL;
mutex_init(&ctx->tx_lock);
- rcu_assign_pointer(icsk->icsk_ulp_data, ctx);
ctx->sk_proto = READ_ONCE(sk->sk_prot);
ctx->sk = sk;
+ /* Release semantic of rcu_assign_pointer() ensures that
+ * ctx->sk_proto is visible before changing sk->sk_prot in
+ * update_sk_prot(), and prevents reading uninitialized value in
+ * tls_{getsockopt, setsockopt}. Note that we do not need a
+ * read barrier in tls_{getsockopt,setsockopt} as there is an
+ * address dependency between sk->sk_proto->{getsockopt,setsockopt}
+ * and ctx->sk_proto.
+ */
+ rcu_assign_pointer(icsk->icsk_ulp_data, ctx);
return ctx;
}