On Mon, 08 Jul 2019 19:15:18 +0000, John Fastabend wrote:
> @@ -836,22 +841,39 @@ static int tls_init(struct sock *sk)

There is a goto out above this which has to be turned into return 0;
if out now releases the lock.

>       if (sk->sk_state != TCP_ESTABLISHED)
>               return -ENOTSUPP;
>  
> +     tls_build_proto(sk);
> +
>       /* allocate tls context */
> +     write_lock_bh(&sk->sk_callback_lock);
>       ctx = create_ctx(sk);
>       if (!ctx) {
>               rc = -ENOMEM;
>               goto out;
>       }
>  
> -     tls_build_proto(sk);
>       ctx->tx_conf = TLS_BASE;
>       ctx->rx_conf = TLS_BASE;
>       ctx->sk_proto = sk->sk_prot;
>       update_sk_prot(sk, ctx);
>  out:
> +     write_unlock_bh(&sk->sk_callback_lock);
>       return rc;
>  }

Reply via email to