BPF List
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jakub Kicinski" <kuba@kernel.org>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH net-next 1/5] tls: reject the combination of TLS and sockmap
Date: Mon, 15 Jun 2026 01:41:23 +0000	[thread overview]
Message-ID: <20260615014123.9EC871F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260614014102.461064-2-kuba@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [Critical] The patch attempts to reject the combination of TLS and sockmap during key configuration, but leaves a critical vulnerability where attaching the TLS ULP to a socket already in a sockmap causes global protocol state corruption, infinite loops in unrelated sockets, and silently bypasses BPF sk_msg policies.
--

commit 12fd2fff4db720c6f124011a38950efdbcd77414
Author: Jakub Kicinski <kuba@kernel.org>

tls: reject the combination of TLS and sockmap

This commit attempts to reject the combination of TLS and sockmap by
returning -EINVAL in do_tls_setsockopt_conf() if a psock is attached.
The goal is to prevent latent bugs while removing dead code.

> diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
> index 13c88a7b8787d..8e7ba018988d2 100644
> --- a/net/tls/tls_main.c
> +++ b/net/tls/tls_main.c
> @@ -643,6 +643,17 @@ static int do_tls_setsockopt_conf(struct sock *sk, sockptr_t optval,
[ ... ]
>  	int rc = 0;
>  	int conf;
>  
> +	/* TLS and sockmap are mutually exclusive. A socket already in a
> +	 * sockmap (i.e. with a psock attached) cannot be upgraded to TLS.
> +	 * sockmap rejects TLS sockets already (see sk_psock_init()).
> +	 */
> +	rcu_read_lock();
> +	if (sk_psock(sk)) {
> +		rcu_read_unlock();
> +		return -EINVAL;
> +	}
> +	rcu_read_unlock();
> +
[Severity: Critical]
This isn't a bug introduced by this patch, but does this check happen too
late to prevent global protocol state corruption?

If an unprivileged user adds an established TCP socket to a sockmap, the
socket's sk_prot is changed to tcp_bpf_prots. If they then attach the TLS ULP,
tls_init() executes and immediately calls tls_build_proto() before this
key configuration check is ever reached:

net/tls/tls_main.c:tls_init() {
    ...
    tls_build_proto(sk);
    ...
}

This function reads the socket's current sk_prot and uses it to rebuild the
global tls_prots array:

net/tls/tls_main.c:tls_build_proto() {
    ...
    struct proto *prot = READ_ONCE(sk->sk_prot);
    ...
    build_protos(tls_prots[TLSV4], prot);
    ...
}

Because sk_prot is tcp_bpf_prots, the unhash handler in the tls_prots array 
is permanently overwritten with sock_map_unhash.

Any subsequent normal TLS socket will inherit this corrupted global array.
When the normal TLS socket is closed, sock_map_unhash() is invoked. Since
the normal socket has no psock, it attempts to fall back to the original
unhash function, leading to an infinite retry loop:

net/core/sock_map.c:sock_map_unhash() {
    ...
    saved_unhash = READ_ONCE(sk->sk_prot)->unhash;
    if (unlikely(saved_unhash == sock_map_unhash))
        goto retry;
    ...
}

Because sk->sk_prot points to the corrupted tls_prots array, it reads
sock_map_unhash again, causing a kernel hard lockup.

Could a check be placed in tls_init() or tcp_set_ulp() instead, to prevent
ULP attachment entirely before tls_build_proto() is called?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260614014102.461064-1-kuba@kernel.org?part=1

  parent reply	other threads:[~2026-06-15  1:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-14  1:40 [PATCH net-next 0/5] tls: reject the combination of TLS and sockmap Jakub Kicinski
2026-06-14  1:40 ` [PATCH net-next 1/5] " Jakub Kicinski
2026-06-14  8:09   ` Paolo Abeni
2026-06-14 19:12     ` Jakub Sitnicki
2026-06-15  1:41   ` sashiko-bot [this message]
2026-06-14  1:40 ` [PATCH net-next 2/5] tls: remove dead sockmap (psock) handling from the SW path Jakub Kicinski
2026-06-14  1:40 ` [PATCH net-next 3/5] selftests/bpf: remove sockmap + ktls tests Jakub Kicinski
2026-06-14  1:40 ` [PATCH net-next 4/5] selftests/bpf: drop the unused kTLS program from test_sockmap Jakub Kicinski
2026-06-14  1:41 ` [PATCH net-next 5/5] selftests/bpf: test that TLS crypto is rejected on a sockmap socket Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260615014123.9EC871F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=kuba@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox