You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The minimized reproduction code below hangs on gVisor. It creates a child process via fork+exec and waits for it to exit including any pending IO operations. On runc the following is returned to epoll_wait of the parent process upon child exit (strace output):
It is strange that stdin (write-only fd) is polled with EPOLLIN.
The Twisted framework that exposed this bug has some workarounds for bugs in Linux going back to v2.6.11. I wouldn't be surprised if this behavior was some kind of workaround that has never been touched since then.
Description
The minimized reproduction code below hangs on gVisor. It creates a child process via fork+exec and waits for it to exit including any pending IO operations. On runc the following is returned to epoll_wait of the parent process upon child exit (strace output):
epoll is setup as follows:
Whereas on gVisor the following is observed:
epoll is setup as follows:
The 7, 8, 10 file descriptors refer to pipes to stdin, stdout and stderr of the child process respectively.
As can be seen, on real Linux EPOLLERR is returned for stdin pipe upon child process exit whereas on gVisor this is absent.
Steps to reproduce
In the container:
Test code in Python:
runsc version
docker version (if using docker)
uname
Linux abcd 6.1.0-15-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.66-1 (2023-12-09) 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: