qemu/char-stdio-Restore-blocking-mode-of-stdout-on-exit.patch
Jiabo Feng ab7fc8ee5b QEMU update to version 6.2.0-99:
- target/i386: Introduce SapphireRapids-v3 to add missing features
- qtest/fuzz-lsi53c895a-test: set guest RAM to 2G
- hw/net/lan9118: Signal TSFL_INT flag when TX FIFO reaches specified level
- target/arm: Fix alignment for VLD4.32
- hw/microblaze: pass random seed to fdt
- tests/qtest: npcm7xx-emc-test: Skip checking MAC
- tests: mark io-command test as skipped if socat is missing
- tests: unit: add NULL-pointer check
- tests: test-qga: close socket on failure to connect
- vdpa:block device capacity expansion online support vdpa block device update capacity.
- virtio-net: Ensure queue index fits with RSS(CVE-2024-6505)
- nbd/server: CVE-2024-7409: Avoid use-after-free when closing server
- ppc/vof: Fix unaligned FDT property access
- vvfat: Fix reading files with non-continuous clusters
- vvfat: Fix bug in writing to middle of file
- savevm: Fix load_snapshot error path crash
- hw/dma/xilinx_axidma: Use semicolon at end of statement, not comma
- hw/remote/message.c: Don't directly invoke DeviceClass:reset
- crypto/tlscredspsk: Free username on finalize
- hw/display/vhost-user-gpu.c: fix vhost_user_gpu_chr_read()
- virtio: remove virtio_tswap16s() call in vring_packed_event_read()
- char-stdio: Restore blocking mode of stdout on exit
- hw/ppc: spapr: Use qemu_vfree() to free spapr->htab
- smbios: sanitize type from external type before checking have_fields_bitmap
- spapr_pci: fix leak in spapr_phb_vfio_get_loc_code
- KVM: use store-release to mark dirty pages as harvested
- monitor/hmp: print trace as option in help for log command
- tpm_crb: Avoid backend startup just before shutdown under Xen
- crypto/block-luks: make range overlap check more readable
- spapr: Free stdout path
- target/rx: Use target_ulong for address in LI
- virtio-pci: Fix the use of an uninitialized irqfd
- rtl8139: Fix behaviour for old kernels.
- virtio-rng: block max-bytes=0 MIME-Version: 1.0
- hw/audio/es1370: Clean up comment
- vhost-user-server: do not set memory fd non-blocking
- ui: reject extended clipboard message if not activated
- virtio-net: Fix vhost virtqueue notifiers for RSS
- hw/misc/applesmc: Fix memory leak in reset() handler

Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com>
(cherry picked from commit db7a5d9a7239db307c8c1454fab5f8a92fd486b8)
2024-09-18 15:37:32 +08:00

55 lines
1.9 KiB
Diff

From 17744d85df589f40e889639147889c98a50bc671 Mon Sep 17 00:00:00 2001
From: zhujun2 <zhujun2_yewu@cmss.chinamobile.com>
Date: Wed, 4 Sep 2024 23:25:17 -0700
Subject: [PATCH] char-stdio: Restore blocking mode of stdout on exit
qemu_chr_open_fd() sets stdout into non-blocking mode. Restore the old
fd flags on exit to avoid breaking unsuspecting applications that run on
the same terminal after qemu and don't expect to get EAGAIN.
While at at, also ensure term_exit is called once (at the moment it's
called both from char_stdio_finalize() and as the atexit() hook.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2423
Signed-off-by: Maxim Mikityanskiy <maxtram95@gmail.com>
Link: https://lore.kernel.org/r/20240703190812.3459514-1-maxtram95@gmail.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit a0124e333e2176640f233e5ea57a2f413985d9b5)
Signed-off-by: zhujun2 <zhujun2_yewu@cmss.chinamobile.com>
---
chardev/char-stdio.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c
index 403da308c9..69bedca7f5 100644
--- a/chardev/char-stdio.c
+++ b/chardev/char-stdio.c
@@ -41,6 +41,7 @@
/* init terminal so that we can grab keys */
static struct termios oldtty;
static int old_fd0_flags;
+static int old_fd1_flags;
static bool stdio_in_use;
static bool stdio_allow_signal;
static bool stdio_echo_state;
@@ -50,6 +51,8 @@ static void term_exit(void)
if (stdio_in_use) {
tcsetattr(0, TCSANOW, &oldtty);
fcntl(0, F_SETFL, old_fd0_flags);
+ fcntl(1, F_SETFL, old_fd1_flags);
+ stdio_in_use = false;
}
}
@@ -102,6 +105,7 @@ static void qemu_chr_open_stdio(Chardev *chr,
stdio_in_use = true;
old_fd0_flags = fcntl(0, F_GETFL);
+ old_fd1_flags = fcntl(1, F_GETFL);
tcgetattr(0, &oldtty);
qemu_set_nonblock(0);
atexit(term_exit);
--
2.41.0.windows.1