[PATCH v3 0/2] io: make sure we don't close stdio fds

Filip Hejsek posted 2 patches 6 days, 14 hours ago
chardev/char-stdio.c      | 16 +++++++++++++++-
include/io/channel-file.h | 12 ++++++++----
io/channel-file.c         |  6 ++++++
3 files changed, 29 insertions(+), 5 deletions(-)
[PATCH v3 0/2] io: make sure we don't close stdio fds
Posted by Filip Hejsek 6 days, 14 hours ago
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 and modifies the documentation of that function to say that passing
stdio descriptors is incorrect.

Changes in v3:
- Add documentation changes
- Link to v2: https://lore.kernel.org/qemu-devel/20261015-fix-stdio-close-v2-0-0f01e6580e24@gmail.com

Changes in v2:
- Code style fixes
- Set *errp when dup fails
- Link to v1: https://lore.kernel.org/qemu-devel/20261013-fix-stdio-close-v1-0-4ecfa416c7bc@gmail.com

Signed-off-by: Filip Hejsek <filip.hejsek@gmail.com>
---
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      | 16 +++++++++++++++-
 include/io/channel-file.h | 12 ++++++++----
 io/channel-file.c         |  6 ++++++
 3 files changed, 29 insertions(+), 5 deletions(-)
---
base-commit: 7e8d3c7fc460fe7cd28a3e423d7466fa292bc269
change-id: 20261012-fix-stdio-close-98864055d473

Best regards,
--  
Filip Hejsek <filip.hejsek@gmail.com>
Re: [PATCH v3 0/2] io: make sure we don't close stdio fds
Posted by marcandre.lureau@redhat.com 3 days ago
On Sat, 17 Oct 2026 01:09:07 +0200, Filip Hejsek <filip.hejsek@gmail.com> wrote:
> io: make sure we don't close stdio fds
> 
> 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
> 
> [...]

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

-- 
Marc-André Lureau <marcandre.lureau@redhat.com>