mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-10-10 18:44:13 +10:00
bpf, ktls: Fix data corruption when using bpf_msg_pop_data() in ktls
[ Upstream commit178f6a5c8c
] When sending plaintext data, we initially calculated the corresponding ciphertext length. However, if we later reduced the plaintext data length via socket policy, we failed to recalculate the ciphertext length. This results in transmitting buffers containing uninitialized data during ciphertext transmission. This causes uninitialized bytes to be appended after a complete "Application Data" packet, leading to errors on the receiving end when parsing TLS record. Fixes:d3b18ad31f
("tls: add bpf support to sk_msg handling") Reported-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: John Fastabend <john.fastabend@gmail.com> Acked-by: Jakub Kicinski <kuba@kernel.org> Link: https://lore.kernel.org/bpf/20250609020910.397930-2-jiayuan.chen@linux.dev Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
c0efe4eae2
commit
73fc5d0400
@ -857,6 +857,19 @@ more_data:
|
||||
delta = msg->sg.size;
|
||||
psock->eval = sk_psock_msg_verdict(sk, psock, msg);
|
||||
delta -= msg->sg.size;
|
||||
|
||||
if ((s32)delta > 0) {
|
||||
/* It indicates that we executed bpf_msg_pop_data(),
|
||||
* causing the plaintext data size to decrease.
|
||||
* Therefore the encrypted data size also needs to
|
||||
* correspondingly decrease. We only need to subtract
|
||||
* delta to calculate the new ciphertext length since
|
||||
* ktls does not support block encryption.
|
||||
*/
|
||||
struct sk_msg *enc = &ctx->open_rec->msg_encrypted;
|
||||
|
||||
sk_msg_trim(sk, enc, enc->sg.size - delta);
|
||||
}
|
||||
}
|
||||
if (msg->cork_bytes && msg->cork_bytes > msg->sg.size &&
|
||||
!enospc && !full_record) {
|
||||
|
Loading…
Reference in New Issue
Block a user