Unverified Commit 3bc685f1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!14768 tcp_bpf: Fix the sk_mem_uncharge logic in tcp_bpf_sendmsg

parents a6a98ae1 4d3478a1
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -447,7 +447,6 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
			cork = true;
			psock->cork = NULL;
		}
		sk_msg_return(sk, msg, tosend);
		release_sock(sk);

		origsize = msg->sg.size;
@@ -459,8 +458,9 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
			sock_put(sk_redir);

		lock_sock(sk);
		sk_mem_uncharge(sk, sent);
		if (unlikely(ret < 0)) {
			int free = sk_msg_free_nocharge(sk, msg);
			int free = sk_msg_free(sk, msg);

			if (!cork)
				*copied -= free;
@@ -474,7 +474,7 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
		break;
	case __SK_DROP:
	default:
		sk_msg_free_partial(sk, msg, tosend);
		sk_msg_free(sk, msg);
		sk_msg_apply_bytes(psock, tosend);
		*copied -= (tosend + delta);
		return -EACCES;
@@ -490,12 +490,9 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock,
		}
		if (msg &&
		    msg->sg.data[msg->sg.start].page_link &&
		    msg->sg.data[msg->sg.start].length) {
			if (eval == __SK_REDIRECT)
				sk_mem_charge(sk, tosend - sent);
		    msg->sg.data[msg->sg.start].length)
			goto more_data;
	}
	}
	return ret;
}