Re: [PATCH net-next v4 1/2] tls: annotate lockless access to sk->sk_err

From: Jakub Kicinski

Date: Tue Oct 20 2026 - 17:24:16 EST


On Thu, 15 Oct 2026 20:31:36 -0700 Quanye Yang via B4 Relay wrote:
> struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);
> DEFINE_WAIT_FUNC(wait, woken_wake_function);
> int ret = 0;
> + int skerr;
> long timeo;

reverse xmas tree

> /* a rekey is pending, let userspace deal with it */
> @@ -1107,10 +1114,14 @@ tls_rx_rec_wait(struct sock *sk, bool nonblock, bool released, bool has_copied)
> timeo = sock_rcvtimeo(sk, nonblock);
>
> while (!tls_strp_msg_ready(ctx)) {
> - if (sk->sk_err) {
> - if (has_copied)
> - return -READ_ONCE(sk->sk_err);
> - return sock_error(sk);
> + if (has_copied) {
> + skerr = READ_ONCE(sk->sk_err);
> + if (skerr)
> + return -skerr;
> + } else {
> + skerr = sock_error(sk);
> + if (skerr)
> + return skerr;
> }
>
> if (ret < 0)
> @@ -1132,10 +1143,14 @@ tls_rx_rec_wait(struct sock *sk, bool nonblock, bool released, bool has_copied)
> * sk_err here so a connection abort surfaces as the
> * actual error rather than a clean EOF.
> */
> - if (sk->sk_err) {
> - if (has_copied)
> - return -READ_ONCE(sk->sk_err);
> - return sock_error(sk);
> + if (has_copied) {
> + skerr = READ_ONCE(sk->sk_err);
> + if (skerr)
> + return -skerr;
> + } else {
> + skerr = sock_error(sk);
> + if (skerr)
> + return skerr;

duplicating this now longish check twice in the same function is ugly
this needs to be refactored somehow
--
pw-bot: cr