The stdio chardev currently closes the stdin and stdout fds when it is
destroyed. This means that, assuming char0 is a stdio chardev, invoking
the HMP command
chardev-change char0 null
will cause QEMU to run with descriptors 0 and 1 closed. That's not a
great situation, as:
- the stdio chardev cannot be recreated
- code assuming fds 0 and 1 are open will misbehave
- the fds 0 and 1 will get assigned to newly opened files, possibly
causing them to be confused for actual stdin/stdout
The fist patch fixes the problem by duplicating the fds before they get
passed to qio_channel_file_new_fd(), the second patch adds a warning
that is printed when qio_channel_file_new_fd() is called with a stdio
fd.
Signed-off-by: Filip Hejsek <[email protected]>
---
Filip Hejsek (2):
char-stdio: avoid closing stdio fds
io: report a warning when a file channel is created from a stdio fd
chardev/char-stdio.c | 13 ++++++++++++-
io/channel-file.c | 6 ++++++
2 files changed, 18 insertions(+), 1 deletion(-)
---
base-commit: 615ece3c406b262996e569f29ea6eed0d81c4d8d
change-id: 20261012-fix-stdio-close-98864055d473
Best regards,
--
Filip Hejsek <[email protected]>