mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
net/tls: free record only on encryption error
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: d10523d0b3
("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>
This commit is contained in:
parent
a7bff11f6f
commit
635d939817
1 changed files with 4 additions and 2 deletions
|
@ -796,9 +796,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);
|
||||
|
@ -824,9 +825,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…
Add table
Add a link
Reference in a new issue