net/tls: free record only on encryption error
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>
This commit is contained in:
parent
cff9e73a34
commit
d12fc818b0
@ -797,9 +797,10 @@ static int bpf_exec_tx_verdict(struct sk_msg *msg, struct sock *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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user