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
send() call can start to send an infinite amount of 0 size UDP packets #8566
Comments
FWIW the issue disappears when using the host network stack (https://gvisor.dev/docs/user_guide/networking/#network-passthrough). |
Thank you for the detailed bug report and repro. We are looking into this now. |
I'm having trouble reproducing this. Quick questions:
|
Usually a bit over one minute. 100% reproducibility at 2 minutes. But I have a single laptop sample. I have not tried to reproduce it in other machines. |
A friendly reminder that this issue had no activity for 120 days. |
I am able to reproduce the issue on my workstation.
and the sender stops printing any messages if receiver is running... |
prepareForWrite reads data from p and saves it in udpPacketInfo: In this case data from udpPacketInfo will be lost. |
I think this issue was introduced by bb36c43. |
The caller will wait for the endpointto become writable and try again. Fixes google#8566 Signed-off-by: Andrei Vagin <avagin@google.com>
The caller will wait for the endpointto become writable and try again. Fixes google#8566 Signed-off-by: Andrei Vagin <avagin@google.com>
Description
Using the latest release version, 20230214, a simple
Starts by sending 1400 bytes packets, but at some random point in time the send() call blocks forever and an infinite amount of zero size packets are sent.
If a ICMP "Destination unreachable" packet is received, it goes back to normal.
Steps to reproduce
Standard configuration
Build these two programs:
Receiver
Sender
docker network create gvisor_test
docker run --network=gvisor_test --rm -v $PWD:/test_binaries:ro ubuntu:22.04 /test_binaries/receiver 8001
docker run --network=gvisor_test --rm --runtime=runsc -v $PWD:/test_binaries:ro ubuntu:22.04 /test_binaries/sender 172.18.0.2 8001
After a while you will see it goes from printing "Received 1400" to "Received 0" (and the 0 size packets can be seen in tcpdump), and the sender stops printing anything (it's blocked in the send() call).
If you kill the receiver, the sender will go back to printing "Sent 1400".
runsc version
docker version (if using docker)
uname
Linux skcristian-XPS-13-9370 5.19.0-32-generic #33~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 30 17:03:34 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
kubectl (if using Kubernetes)
No response
repo state (if built from source)
No response
runsc debug logs (if available)
No response
The text was updated successfully, but these errors were encountered: