|
@@ -1048,7 +1048,7 @@ static int bpf_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
|
|
|
timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
|
|
|
|
|
|
while (msg_data_left(msg)) {
|
|
|
- struct sk_msg_buff *m;
|
|
|
+ struct sk_msg_buff *m = NULL;
|
|
|
bool enospc = false;
|
|
|
int copy;
|
|
|
|
|
@@ -1116,8 +1116,11 @@ wait_for_sndbuf:
|
|
|
set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
|
|
|
wait_for_memory:
|
|
|
err = sk_stream_wait_memory(sk, &timeo);
|
|
|
- if (err)
|
|
|
+ if (err) {
|
|
|
+ if (m && m != psock->cork)
|
|
|
+ free_start_sg(sk, m);
|
|
|
goto out_err;
|
|
|
+ }
|
|
|
}
|
|
|
out_err:
|
|
|
if (err < 0)
|