-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpf: fix ktls panic and add tests #4910
Conversation
Upstream branch: d0d106a |
30068fa
to
8982824
Compare
Upstream branch: 7569fc9 |
fb4332b
to
7288f34
Compare
8982824
to
a204586
Compare
Upstream branch: f9f03a0 |
7288f34
to
e5f00ab
Compare
a204586
to
c48c285
Compare
Upstream branch: f9f03a0 |
e5f00ab
to
0edb1cc
Compare
c48c285
to
4177093
Compare
Upstream branch: f9f03a0 |
0edb1cc
to
31e9784
Compare
4177093
to
203286b
Compare
[ 2172.936997] ------------[ cut here ]------------ [ 2172.936999] kernel BUG at lib/iov_iter.c:629! ...... [ 2172.944996] PKRU: 55555554 [ 2172.945155] Call Trace: [ 2172.945299] <TASK> [ 2172.945428] ? die+0x36/0x90 [ 2172.945601] ? do_trap+0xdd/0x100 [ 2172.945795] ? iov_iter_revert+0x178/0x180 [ 2172.946031] ? iov_iter_revert+0x178/0x180 [ 2172.946267] ? do_error_trap+0x7d/0x110 [ 2172.946499] ? iov_iter_revert+0x178/0x180 [ 2172.946736] ? exc_invalid_op+0x50/0x70 [ 2172.946961] ? iov_iter_revert+0x178/0x180 [ 2172.947197] ? asm_exc_invalid_op+0x1a/0x20 [ 2172.947446] ? iov_iter_revert+0x178/0x180 [ 2172.947683] ? iov_iter_revert+0x5c/0x180 [ 2172.947913] tls_sw_sendmsg_locked.isra.0+0x794/0x840 [ 2172.948206] tls_sw_sendmsg+0x52/0x80 [ 2172.948420] ? inet_sendmsg+0x1f/0x70 [ 2172.948634] __sys_sendto+0x1cd/0x200 [ 2172.948848] ? find_held_lock+0x2b/0x80 [ 2172.949072] ? syscall_trace_enter+0x140/0x270 [ 2172.949330] ? __lock_release.isra.0+0x5e/0x170 [ 2172.949595] ? find_held_lock+0x2b/0x80 [ 2172.949817] ? syscall_trace_enter+0x140/0x270 [ 2172.950211] ? lockdep_hardirqs_on_prepare+0xda/0x190 [ 2172.950632] ? ktime_get_coarse_real_ts64+0xc2/0xd0 [ 2172.951036] __x64_sys_sendto+0x24/0x30 [ 2172.951382] do_syscall_64+0x90/0x170 ...... After calling bpf_exec_tx_verdict(), the size of msg_pl->sg may increase, e.g., when the BPF program executes bpf_msg_push_data(). If the BPF program sets cork_bytes and sg.size is smaller than cork_bytes, it will return -ENOSPC and attempt to roll back to the non-zero copy logic. However, during rollback, msg->msg_iter is reset, but since msg_pl->sg.size has been increased, subsequent executions will exceed the actual size of msg_iter. ''' iov_iter_revert(&msg->msg_iter, msg_pl->sg.size - orig_size); ''' The changes in this commit are based on the following considerations: 1. When cork_bytes is set, rolling back to non-zero copy logic is pointless and can directly go to zero-copy logic. 2. Suppose sg.size is initially 5, and we push it to 100, setting apply_bytes to 7. Then, 98 bytes of data are sent out, leaving 2 bytes to be processed. The rollback logic cannot determine which data has been processed and which hasn't. This current change is based on the principle of minimal modification, which won't make things worse. If we still encounter similar panic further, we can consider a more comprehensive solution. Fixes: fcb14cb ("new iov_iter flavour - ITER_UBUF") Fixes: d3b18ad ("tls: add bpf support to sk_msg handling") Signed-off-by: Jiayuan Chen <[email protected]>
add ktls selftest Signed-off-by: Jiayuan Chen <[email protected]>
Upstream branch: c7f2188 |
31e9784
to
93436b2
Compare
At least one diff in series https://patchwork.kernel.org/project/netdevbpf/list/?series=927894 expired. Closing PR. |
Pull request for series with
subject: bpf: fix ktls panic and add tests
version: 1
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=927894