Message ID | 20250317-vsock-trans-signal-race-v4-0-fc8837f3f1d4@rbox.co (mailing list archive) |
---|---|
Headers | show |
Series | vsock/bpf: Handle races between sockmap update and connect() disconnecting | expand |
On Mon, Mar 17, 2025 at 10:52:22AM +0100, Michal Luczaj wrote: > Signal delivery during connect() may disconnect an already established > socket. Problem is that such socket might have been placed in a sockmap > before the connection was closed. > > PATCH 1 ensures this race won't lead to an unconnected vsock staying in the > sockmap. PATCH 2 selftests it. > > PATCH 3 fixes a related race. Note that selftest in PATCH 2 does test this > code as well, but winning this race variant may take more than 2 seconds, > so I'm not advertising it. > > Signed-off-by: Michal Luczaj <mhal@rbox.co> vsock things: Acked-by: Michael S. Tsirkin <mst@redhat.com> > --- > Changes in v4: > - Selftest: send signal to only our own process > - Link to v3: https://lore.kernel.org/r/20250316-vsock-trans-signal-race-v3-0-17a6862277c9@rbox.co > > Changes in v3: > - Selftest: drop unnecessary variable initialization and reorder the calls > - Link to v2: https://lore.kernel.org/r/20250314-vsock-trans-signal-race-v2-0-421a41f60f42@rbox.co > > Changes in v2: > - Handle one more path of tripping the warning > - Add a selftest > - Collect R-b [Stefano] > - Link to v1: https://lore.kernel.org/r/20250307-vsock-trans-signal-race-v1-1-3aca3f771fbd@rbox.co > > --- > Michal Luczaj (3): > vsock/bpf: Fix EINTR connect() racing sockmap update > selftest/bpf: Add test for AF_VSOCK connect() racing sockmap update > vsock/bpf: Fix bpf recvmsg() racing transport reassignment > > net/vmw_vsock/af_vsock.c | 10 ++- > net/vmw_vsock/vsock_bpf.c | 24 ++++-- > .../selftests/bpf/prog_tests/sockmap_basic.c | 99 ++++++++++++++++++++++ > 3 files changed, 124 insertions(+), 9 deletions(-) > --- > base-commit: da9e8efe7ee10e8425dc356a9fc593502c8e3933 > change-id: 20250305-vsock-trans-signal-race-d62f7718d099 > > Best regards, > -- > Michal Luczaj <mhal@rbox.co>
Signal delivery during connect() may disconnect an already established socket. Problem is that such socket might have been placed in a sockmap before the connection was closed. PATCH 1 ensures this race won't lead to an unconnected vsock staying in the sockmap. PATCH 2 selftests it. PATCH 3 fixes a related race. Note that selftest in PATCH 2 does test this code as well, but winning this race variant may take more than 2 seconds, so I'm not advertising it. Signed-off-by: Michal Luczaj <mhal@rbox.co> --- Changes in v4: - Selftest: send signal to only our own process - Link to v3: https://lore.kernel.org/r/20250316-vsock-trans-signal-race-v3-0-17a6862277c9@rbox.co Changes in v3: - Selftest: drop unnecessary variable initialization and reorder the calls - Link to v2: https://lore.kernel.org/r/20250314-vsock-trans-signal-race-v2-0-421a41f60f42@rbox.co Changes in v2: - Handle one more path of tripping the warning - Add a selftest - Collect R-b [Stefano] - Link to v1: https://lore.kernel.org/r/20250307-vsock-trans-signal-race-v1-1-3aca3f771fbd@rbox.co --- Michal Luczaj (3): vsock/bpf: Fix EINTR connect() racing sockmap update selftest/bpf: Add test for AF_VSOCK connect() racing sockmap update vsock/bpf: Fix bpf recvmsg() racing transport reassignment net/vmw_vsock/af_vsock.c | 10 ++- net/vmw_vsock/vsock_bpf.c | 24 ++++-- .../selftests/bpf/prog_tests/sockmap_basic.c | 99 ++++++++++++++++++++++ 3 files changed, 124 insertions(+), 9 deletions(-) --- base-commit: da9e8efe7ee10e8425dc356a9fc593502c8e3933 change-id: 20250305-vsock-trans-signal-race-d62f7718d099 Best regards,