lkml.org 
[lkml]   [2020]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 028/142] net/tls: free record only on encryption error
    Date
    From: Vadim Fedorenko <vfedorenko@novek.ru>

    commit 635d9398178659d8ddba79dd061f9451cec0b4d1 upstream.

    We cannot free record on any transient error because it leads to
    losing previos data. Check socket error to know whether record must
    be freed or not.

    Fixes: d10523d0b3d7 ("net/tls: free the record on encryption error")
    Signed-off-by: Vadim Fedorenko <vfedorenko@novek.ru>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/tls/tls_sw.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    --- a/net/tls/tls_sw.c
    +++ b/net/tls/tls_sw.c
    @@ -797,9 +797,10 @@ static int bpf_exec_tx_verdict(struct sk
    psock = sk_psock_get(sk);
    if (!psock || !policy) {
    err = tls_push_record(sk, flags, record_type);
    - if (err && err != -EINPROGRESS) {
    + if (err && sk->sk_err == EBADMSG) {
    *copied -= sk_msg_free(sk, msg);
    tls_free_open_rec(sk);
    + err = -sk->sk_err;
    }
    if (psock)
    sk_psock_put(sk, psock);
    @@ -825,9 +826,10 @@ more_data:
    switch (psock->eval) {
    case __SK_PASS:
    err = tls_push_record(sk, flags, record_type);
    - if (err && err != -EINPROGRESS) {
    + if (err && sk->sk_err == EBADMSG) {
    *copied -= sk_msg_free(sk, msg);
    tls_free_open_rec(sk);
    + err = -sk->sk_err;
    goto out_err;
    }
    break;

    \
     
     \ /
      Last update: 2020-06-01 20:50    [W:4.203 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site