-
commands: fix state socket implementation · e2bce0ecChristian Brauner authored
Remove dead state clients from state client list. Consider the following scenario: 01 start container 02 issue shutdown request 03 state_client_fd is added to lxc_handler 03 container doesn't respond to shutdown request 04 user aborts shutdown request 05 lxc_cmd_fd_cleanup() removes state_client_fd from lxc_mainloop 06 invalid state_client_fd is still recorded in the lxc_handler 07 user issues lxc_cmd_stop() request via SIGKILL 08 container reaches STOPPED state and sends message to state_client_fd 09 state_client_fd number has been reused by lxc_cmd_stop_callback() 10 invalid data gets dumped to lxc_cmd_stop() Reproducer: Set an invalid shutdown signal to which the init system does not respond with a shutdown via lxc.signal.halt e.g. "lxc.signal.halt = SIGUSR1". Then do: 1. start container root@conventiont|~ > lxc-start -n a1 2. try to shutdown container root@conventiont|~ > lxc-stop -n a1 3. abort shutdown ^C 4. SIGKILL the container (lxc.signal.stop = SIGKILL) root@conventiont|~ > lxc-stop -n a1 -k lxc-stop: a1: commands.c: lxc_cmd_rsp_recv: 165 File too large - Response data for command "stop" is too long: 12641 bytes > 8192 To not let this happen we remove the state_client_fd from the lxc_handler when we detect a cleanup event in lxc_cmd_fd_cleanup(). Signed-off-by:Christian Brauner <christian.brauner@ubuntu.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| include | Loading commit data... | |
| lua-lxc | Loading commit data... | |
| lxc | Loading commit data... | |
| python-lxc | Loading commit data... | |
| tests | Loading commit data... | |
| Makefile.am | Loading commit data... |