-
Notifications
You must be signed in to change notification settings - Fork 132
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 with sockmap and add tests #8509
base: bpf-next_base
Are you sure you want to change the base?
Conversation
Upstream branch: 654765b |
a814b9b
to
c4bbe91
Compare
Upstream branch: d0da259 |
9c228ae
to
e3cc193
Compare
c4bbe91
to
072f756
Compare
Upstream branch: e8af068 |
e3cc193
to
41a6f3e
Compare
072f756
to
d5f119f
Compare
Upstream branch: ac13c50 |
41a6f3e
to
ca1d7a9
Compare
d5f119f
to
038d931
Compare
Upstream branch: 7042882 |
ca1d7a9
to
ca30cc6
Compare
038d931
to
57dcc3a
Compare
Upstream branch: bd4319b |
ca30cc6
to
9b31daf
Compare
57dcc3a
to
d7a737b
Compare
Upstream branch: e0525cd |
9b31daf
to
8be5a14
Compare
d7a737b
to
74bd319
Compare
Upstream branch: 63817c7 |
8be5a14
to
1cc98ba
Compare
74bd319
to
5ed7ad7
Compare
Upstream branch: 201b62c |
1cc98ba
to
c587fb7
Compare
5ed7ad7
to
1be57b8
Compare
Upstream branch: 7e437dc |
fa7e2bb
to
a0beb50
Compare
a49d23f
to
88feb0d
Compare
Upstream branch: f282146 |
a0beb50
to
62e8a63
Compare
88feb0d
to
eb5d065
Compare
Upstream branch: 79d93c8 |
62e8a63
to
5517913
Compare
eb5d065
to
1ceb0d9
Compare
Upstream branch: 74f36a9 |
5517913
to
dc99248
Compare
1ceb0d9
to
b7965ce
Compare
Upstream branch: 157a502 |
dc99248
to
f248236
Compare
b7965ce
to
084fae2
Compare
Upstream branch: 233732b |
f248236
to
a53c5dc
Compare
084fae2
to
474f6ed
Compare
Upstream branch: a68894a |
a53c5dc
to
6b10560
Compare
474f6ed
to
44c3a1d
Compare
Upstream branch: be741c7 |
6b10560
to
837ba02
Compare
44c3a1d
to
720c696
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. We can not calculate the correct number of bytes to revert msg_iter. Assume the original data is "abcdefgh" (8 bytes), and after 3 pushes by the BPF program, it becomes 11-byte data: "abc?de?fgh?". Then, we set cork_bytes to 6, which means the first 6 bytes have been processed, and the remaining 5 bytes "?fgh?" will be cached until the length meets the cork_bytes requirement. However, some data in "?fgh?" is not within 'sg->msg_iter' (but in msg_pl instead), especially the data "?" we pushed. So it doesn't seem as simple as just reverting through an offset of msg_iter. 3. For non-TLS sockets in tcp_bpf_sendmsg, when a "cork" situation occurs, the user-space send() doesn't return an error, and the returned length is the same as the input length parameter, even if some data is cached. Additionally, I saw that the current non-zero-copy logic for handling corking is written as: ''' line 1177 else if (ret != -EAGAIN) { if (ret == -ENOSPC) ret = 0; goto send_end; ''' So it's ok to just return 'copied' without error when a "cork" situation occurs. 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 for sockmap Test results: sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/tls simple offload:OK sockmap_ktls/tls tx cork:OK sockmap_ktls/tls tx cork with push:OK sockmap_ktls/tls simple offload:OK sockmap_ktls/tls tx cork:OK sockmap_ktls/tls tx cork with push:OK sockmap_ktls:OK Signed-off-by: Jiayuan Chen <[email protected]>
Upstream branch: 46d38f4 |
837ba02
to
5ee2028
Compare
Pull request for series with
subject: bpf: fix ktls panic with sockmap and add tests
version: 2
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=935422