From 95b76324365cfb276d534048523b98542b8da52b Mon Sep 17 00:00:00 2001 From: Gan Qixin Date: Tue, 17 Dec 2024 17:42:52 +0800 Subject: [PATCH] QEMU update to version 6.2.0-104: - intel_iommu: Add missed reserved bit check for IEC descriptor - 9pfs: fix crash on 'Treaddir' request - s390x/ap: fix missing subsystem reset registration - qemu/bswap: Undefine CPU_CONVERT() once done - linux-user: Add missing signals in strace output - linux-user: Add missing clock_gettime64() syscall strace Signed-off-by: Gan Qixin (cherry picked from commit 692bd89e009248b7108baa30dfb2fdeeb55a8bbd) --- 9pfs-fix-crash-on-Treaddir-request.patch | 64 ++++++ ...missed-reserved-bit-check-for-IEC-de.patch | 56 ++++++ ...issing-clock_gettime64-syscall-strac.patch | 120 +++++++++++ ...Add-missing-signals-in-strace-output.patch | 187 ++++++++++++++++++ ...bswap-Undefine-CPU_CONVERT-once-done.patch | 37 ++++ qemu.spec | 16 +- ...missing-subsystem-reset-registration.patch | 37 ++++ 7 files changed, 516 insertions(+), 1 deletion(-) create mode 100644 9pfs-fix-crash-on-Treaddir-request.patch create mode 100644 intel_iommu-Add-missed-reserved-bit-check-for-IEC-de.patch create mode 100644 linux-user-Add-missing-clock_gettime64-syscall-strac.patch create mode 100644 linux-user-Add-missing-signals-in-strace-output.patch create mode 100644 qemu-bswap-Undefine-CPU_CONVERT-once-done.patch create mode 100644 s390x-ap-fix-missing-subsystem-reset-registration.patch diff --git a/9pfs-fix-crash-on-Treaddir-request.patch b/9pfs-fix-crash-on-Treaddir-request.patch new file mode 100644 index 00000000..1d9eedbf --- /dev/null +++ b/9pfs-fix-crash-on-Treaddir-request.patch @@ -0,0 +1,64 @@ +From 4d4c15d8fac49731db7727c7f91b4184c2a95d78 Mon Sep 17 00:00:00 2001 +From: Christian Schoenebeck +Date: Tue, 5 Nov 2024 11:25:26 +0100 +Subject: [PATCH] 9pfs: fix crash on 'Treaddir' request + +A bad (broken or malicious) 9p client (guest) could cause QEMU host to +crash by sending a 9p 'Treaddir' request with a numeric file ID (FID) that +was previously opened for a file instead of an expected directory: + + #0 0x0000762aff8f4919 in __GI___rewinddir (dirp=0xf) at + ../sysdeps/unix/sysv/linux/rewinddir.c:29 + #1 0x0000557b7625fb40 in do_readdir_many (pdu=0x557bb67d2eb0, + fidp=0x557bb67955b0, entries=0x762afe9fff58, offset=0, maxsize=131072, + dostat=) at ../hw/9pfs/codir.c:101 + #2 v9fs_co_readdir_many (pdu=pdu@entry=0x557bb67d2eb0, + fidp=fidp@entry=0x557bb67955b0, entries=entries@entry=0x762afe9fff58, + offset=0, maxsize=131072, dostat=false) at ../hw/9pfs/codir.c:226 + #3 0x0000557b7625c1f9 in v9fs_do_readdir (pdu=0x557bb67d2eb0, + fidp=0x557bb67955b0, offset=, + max_count=) at ../hw/9pfs/9p.c:2488 + #4 v9fs_readdir (opaque=0x557bb67d2eb0) at ../hw/9pfs/9p.c:2602 + +That's because V9fsFidOpenState was declared as union type. So the +same memory region is used for either an open POSIX file handle (int), +or a POSIX DIR* pointer, etc., so 9p server incorrectly used the +previously opened (valid) POSIX file handle (0xf) as DIR* pointer, +eventually causing a crash in glibc's rewinddir() function. + +Root cause was therefore a missing check in 9p server's 'Treaddir' +request handler, which must ensure that the client supplied FID was +really opened as directory stream before trying to access the +aforementioned union and its DIR* member. + +Cc: qemu-stable@nongnu.org +Fixes: d62dbb51f7 ("virtio-9p: Add fidtype so that we can do type ...") +Reported-by: Akihiro Suda +Tested-by: Akihiro Suda +Signed-off-by: Christian Schoenebeck +Reviewed-by: Greg Kurz +Message-Id: +Signed-off-by: Zhongrui Tang +--- + hw/9pfs/9p.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c +index 15b3f4d385..4e52f26afe 100644 +--- a/hw/9pfs/9p.c ++++ b/hw/9pfs/9p.c +@@ -2528,6 +2528,11 @@ static void coroutine_fn v9fs_readdir(void *opaque) + retval = -EINVAL; + goto out_nofid; + } ++ if (fidp->fid_type != P9_FID_DIR) { ++ warn_report_once("9p: bad client: T_readdir on non-directory stream"); ++ retval = -ENOTDIR; ++ goto out; ++ } + if (!fidp->fs.dir.stream) { + retval = -EINVAL; + goto out; +-- +2.33.0 + diff --git a/intel_iommu-Add-missed-reserved-bit-check-for-IEC-de.patch b/intel_iommu-Add-missed-reserved-bit-check-for-IEC-de.patch new file mode 100644 index 00000000..b44d1cca --- /dev/null +++ b/intel_iommu-Add-missed-reserved-bit-check-for-IEC-de.patch @@ -0,0 +1,56 @@ +From cba5a006eb08a400126e1882923a28f71a40a94a Mon Sep 17 00:00:00 2001 +From: Zhenzhong Duan +Date: Mon, 4 Nov 2024 20:55:36 +0800 +Subject: [PATCH] intel_iommu: Add missed reserved bit check for IEC descriptor + +IEC descriptor is 128-bit invalidation descriptor, must be padded with +128-bits of 0s in the upper bytes to create a 256-bit descriptor when +the invalidation queue is configured for 256-bit descriptors (IQA_REG.DW=1). + +Fixes: 02a2cbc872df ("x86-iommu: introduce IEC notifiers") +Signed-off-by: Zhenzhong Duan +Message-Id: <20241104125536.1236118-4-zhenzhong.duan@intel.com> +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Zhongrui Tang tangzhongrui_yewu@cmss.chinamobile.com +--- + hw/i386/intel_iommu.c | 8 ++++++++ + hw/i386/intel_iommu_internal.h | 3 +++ + 2 files changed, 11 insertions(+) + +diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c +index 2f8bcc1557..bc580237a8 100644 +--- a/hw/i386/intel_iommu.c ++++ b/hw/i386/intel_iommu.c +@@ -2417,6 +2417,14 @@ static bool vtd_process_iotlb_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) + static bool vtd_process_inv_iec_desc(IntelIOMMUState *s, + VTDInvDesc *inv_desc) + { ++ uint64_t mask[4] = {VTD_INV_DESC_IEC_RSVD, VTD_INV_DESC_ALL_ONE, ++ VTD_INV_DESC_ALL_ONE, VTD_INV_DESC_ALL_ONE}; ++ ++ if (!vtd_inv_desc_reserved_check(s, inv_desc, mask, false, ++ __func__, "iec inv")) { ++ return false; ++ } ++ + trace_vtd_inv_desc_iec(inv_desc->iec.granularity, + inv_desc->iec.index, + inv_desc->iec.index_mask); +diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h +index 2b2f0dd848..7415b56bc4 100644 +--- a/hw/i386/intel_iommu_internal.h ++++ b/hw/i386/intel_iommu_internal.h +@@ -388,6 +388,9 @@ typedef union VTDInvDesc VTDInvDesc; + #define VTD_INV_DESC_DEVICE_IOTLB_RSVD_HI 0xffeULL + #define VTD_INV_DESC_DEVICE_IOTLB_RSVD_LO 0xffff0000ffe0f1f0 + ++/* Masks for Interrupt Entry Invalidate Descriptor */ ++#define VTD_INV_DESC_IEC_RSVD 0xffff000007fff1e0ULL ++ + /* Rsvd field masks for spte */ + #define VTD_SPTE_SNP 0x800ULL + +-- +2.33.0 + diff --git a/linux-user-Add-missing-clock_gettime64-syscall-strac.patch b/linux-user-Add-missing-clock_gettime64-syscall-strac.patch new file mode 100644 index 00000000..c2f1918d --- /dev/null +++ b/linux-user-Add-missing-clock_gettime64-syscall-strac.patch @@ -0,0 +1,120 @@ +From 13cffdbd2c5074682887c27f47c81e87843e741d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E5=88=98=E5=A9=A720201110?= + +Date: Wed, 13 Nov 2024 19:36:45 +0800 +Subject: [PATCH] linux-user: Add missing clock_gettime64() syscall strace + +Allow linux-user to strace the clock_gettime64() syscall. +This syscall is used a lot on 32-bit guest architectures which use newer +glibc versions. + +Signed-off-by: Helge Deller +Reviewed-by: Laurent Vivier +Message-Id: <20220918194555.83535-3-deller@gmx.de> +Signed-off-by: Laurent Vivier +Signed-off-by: Liu Jing +--- + linux-user/strace.c | 53 ++++++++++++++++++++++++++++++++++++++++++ + linux-user/strace.list | 4 ++++ + 2 files changed, 57 insertions(+) + +diff --git a/linux-user/strace.c b/linux-user/strace.c +index 37d66d0dff..4cf0e95edb 100644 +--- a/linux-user/strace.c ++++ b/linux-user/strace.c +@@ -81,6 +81,7 @@ UNUSED static void print_buf(abi_long addr, abi_long len, int last); + UNUSED static void print_raw_param(const char *, abi_long, int); + UNUSED static void print_timeval(abi_ulong, int); + UNUSED static void print_timespec(abi_ulong, int); ++UNUSED static void print_timespec64(abi_ulong, int); + UNUSED static void print_timezone(abi_ulong, int); + UNUSED static void print_itimerval(abi_ulong, int); + UNUSED static void print_number(abi_long, int); +@@ -803,6 +804,24 @@ print_syscall_ret_clock_gettime(void *cpu_env, const struct syscallname *name, + #define print_syscall_ret_clock_getres print_syscall_ret_clock_gettime + #endif + ++#if defined(TARGET_NR_clock_gettime64) ++static void ++print_syscall_ret_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name, ++ abi_long ret, abi_long arg0, abi_long arg1, ++ abi_long arg2, abi_long arg3, abi_long arg4, ++ abi_long arg5) ++{ ++ if (!print_syscall_err(ret)) { ++ qemu_log(TARGET_ABI_FMT_ld, ret); ++ qemu_log(" ("); ++ print_timespec64(arg1, 1); ++ qemu_log(")"); ++ } ++ ++ qemu_log("\n"); ++} ++#endif ++ + #ifdef TARGET_NR_gettimeofday + static void + print_syscall_ret_gettimeofday(void *cpu_env, const struct syscallname *name, +@@ -1662,6 +1681,27 @@ print_timespec(abi_ulong ts_addr, int last) + } + } + ++static void ++print_timespec64(abi_ulong ts_addr, int last) ++{ ++ if (ts_addr) { ++ struct target__kernel_timespec *ts; ++ ++ ts = lock_user(VERIFY_READ, ts_addr, sizeof(*ts), 1); ++ if (!ts) { ++ print_pointer(ts_addr, last); ++ return; ++ } ++ qemu_log("{tv_sec = %lld" ++ ",tv_nsec = %lld}%s", ++ (long long)tswap64(ts->tv_sec), (long long)tswap64(ts->tv_nsec), ++ get_comma(last)); ++ unlock_user(ts, ts_addr, 0); ++ } else { ++ qemu_log("NULL%s", get_comma(last)); ++ } ++} ++ + static void + print_timezone(abi_ulong tz_addr, int last) + { +@@ -2277,6 +2317,19 @@ print_clock_gettime(void *cpu_env, const struct syscallname *name, + #define print_clock_getres print_clock_gettime + #endif + ++#if defined(TARGET_NR_clock_gettime64) ++static void ++print_clock_gettime64(CPUArchState *cpu_env, const struct syscallname *name, ++ abi_long arg0, abi_long arg1, abi_long arg2, ++ abi_long arg3, abi_long arg4, abi_long arg5) ++{ ++ print_syscall_prologue(name); ++ print_enums(clockids, arg0, 0); ++ print_pointer(arg1, 1); ++ print_syscall_epilogue(name); ++} ++#endif ++ + #ifdef TARGET_NR_clock_settime + static void + print_clock_settime(void *cpu_env, const struct syscallname *name, +diff --git a/linux-user/strace.list b/linux-user/strace.list +index 544869f1ab..f9b3f01c6c 100644 +--- a/linux-user/strace.list ++++ b/linux-user/strace.list +@@ -1674,3 +1674,7 @@ + #ifdef TARGET_NR_copy_file_range + { TARGET_NR_copy_file_range, "copy_file_range", "%s(%d,%p,%d,%p,"TARGET_ABI_FMT_lu",%u)", NULL, NULL }, + #endif ++#ifdef TARGET_NR_clock_gettime64 ++{ TARGET_NR_clock_gettime64, "clock_gettime64" , NULL, print_clock_gettime64, ++ print_syscall_ret_clock_gettime64 }, ++#endif +-- +2.33.0 + diff --git a/linux-user-Add-missing-signals-in-strace-output.patch b/linux-user-Add-missing-signals-in-strace-output.patch new file mode 100644 index 00000000..5730c587 --- /dev/null +++ b/linux-user-Add-missing-signals-in-strace-output.patch @@ -0,0 +1,187 @@ +From 0b83779bb381053ce5de13807dfdc46d2781a2ca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E5=88=98=E5=A9=A720201110?= + +Date: Wed, 13 Nov 2024 19:32:32 +0800 +Subject: [PATCH] linux-user: Add missing signals in strace output + +Some of the guest signal numbers are currently not converted to +their representative names in the strace output, e.g. SIGVTALRM. + +This patch introduces a smart way to generate and keep in sync the +host-to-guest and guest-to-host signal conversion tables for usage in +the qemu signal and strace code. This ensures that any signals +will now show up in both tables. + +There is no functional change in this patch - with the exception that yet +missing signal names now show up in the strace code too. + +Signed-off-by: Helge Deller +Reviewed-by: Laurent Vivier +Message-Id: <20220918194555.83535-2-deller@gmx.de> +Signed-off-by: Laurent Vivier +Signed-off-by: Liu Jing +--- + linux-user/signal-common.h | 46 ++++++++++++++++++++++++++++++++++++++ + linux-user/signal.c | 37 +++--------------------------- + linux-user/strace.c | 30 +++++++++---------------- + 3 files changed, 60 insertions(+), 53 deletions(-) + +diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h +index 7457f8025c..00d9e04d74 100644 +--- a/linux-user/signal-common.h ++++ b/linux-user/signal-common.h +@@ -90,4 +90,50 @@ abi_long do_swapcontext(CPUArchState *env, abi_ulong uold_ctx, + */ + int block_signals(void); /* Returns non zero if signal pending */ + ++#if defined(SIGSTKFLT) && defined(TARGET_SIGSTKFLT) ++#define MAKE_SIG_ENTRY_SIGSTKFLT MAKE_SIG_ENTRY(SIGSTKFLT) ++#else ++#define MAKE_SIG_ENTRY_SIGSTKFLT ++#endif ++ ++#if defined(SIGIOT) && defined(TARGET_SIGIOT) ++#define MAKE_SIG_ENTRY_SIGIOT MAKE_SIG_ENTRY(SIGIOT) ++#else ++#define MAKE_SIG_ENTRY_SIGIOT ++#endif ++ ++#define MAKE_SIGNAL_LIST \ ++ MAKE_SIG_ENTRY(SIGHUP) \ ++ MAKE_SIG_ENTRY(SIGINT) \ ++ MAKE_SIG_ENTRY(SIGQUIT) \ ++ MAKE_SIG_ENTRY(SIGILL) \ ++ MAKE_SIG_ENTRY(SIGTRAP) \ ++ MAKE_SIG_ENTRY(SIGABRT) \ ++ MAKE_SIG_ENTRY(SIGBUS) \ ++ MAKE_SIG_ENTRY(SIGFPE) \ ++ MAKE_SIG_ENTRY(SIGKILL) \ ++ MAKE_SIG_ENTRY(SIGUSR1) \ ++ MAKE_SIG_ENTRY(SIGSEGV) \ ++ MAKE_SIG_ENTRY(SIGUSR2) \ ++ MAKE_SIG_ENTRY(SIGPIPE) \ ++ MAKE_SIG_ENTRY(SIGALRM) \ ++ MAKE_SIG_ENTRY(SIGTERM) \ ++ MAKE_SIG_ENTRY(SIGCHLD) \ ++ MAKE_SIG_ENTRY(SIGCONT) \ ++ MAKE_SIG_ENTRY(SIGSTOP) \ ++ MAKE_SIG_ENTRY(SIGTSTP) \ ++ MAKE_SIG_ENTRY(SIGTTIN) \ ++ MAKE_SIG_ENTRY(SIGTTOU) \ ++ MAKE_SIG_ENTRY(SIGURG) \ ++ MAKE_SIG_ENTRY(SIGXCPU) \ ++ MAKE_SIG_ENTRY(SIGXFSZ) \ ++ MAKE_SIG_ENTRY(SIGVTALRM) \ ++ MAKE_SIG_ENTRY(SIGPROF) \ ++ MAKE_SIG_ENTRY(SIGWINCH) \ ++ MAKE_SIG_ENTRY(SIGIO) \ ++ MAKE_SIG_ENTRY(SIGPWR) \ ++ MAKE_SIG_ENTRY(SIGSYS) \ ++ MAKE_SIG_ENTRY_SIGSTKFLT \ ++ MAKE_SIG_ENTRY_SIGIOT ++ + #endif +diff --git a/linux-user/signal.c b/linux-user/signal.c +index 6d5e5b698c..f65d6cff2f 100644 +--- a/linux-user/signal.c ++++ b/linux-user/signal.c +@@ -53,40 +53,9 @@ abi_ulong default_rt_sigreturn; + QEMU_BUILD_BUG_ON(__SIGRTMAX + 1 != _NSIG); + #endif + static uint8_t host_to_target_signal_table[_NSIG] = { +- [SIGHUP] = TARGET_SIGHUP, +- [SIGINT] = TARGET_SIGINT, +- [SIGQUIT] = TARGET_SIGQUIT, +- [SIGILL] = TARGET_SIGILL, +- [SIGTRAP] = TARGET_SIGTRAP, +- [SIGABRT] = TARGET_SIGABRT, +-/* [SIGIOT] = TARGET_SIGIOT,*/ +- [SIGBUS] = TARGET_SIGBUS, +- [SIGFPE] = TARGET_SIGFPE, +- [SIGKILL] = TARGET_SIGKILL, +- [SIGUSR1] = TARGET_SIGUSR1, +- [SIGSEGV] = TARGET_SIGSEGV, +- [SIGUSR2] = TARGET_SIGUSR2, +- [SIGPIPE] = TARGET_SIGPIPE, +- [SIGALRM] = TARGET_SIGALRM, +- [SIGTERM] = TARGET_SIGTERM, +-#ifdef SIGSTKFLT +- [SIGSTKFLT] = TARGET_SIGSTKFLT, +-#endif +- [SIGCHLD] = TARGET_SIGCHLD, +- [SIGCONT] = TARGET_SIGCONT, +- [SIGSTOP] = TARGET_SIGSTOP, +- [SIGTSTP] = TARGET_SIGTSTP, +- [SIGTTIN] = TARGET_SIGTTIN, +- [SIGTTOU] = TARGET_SIGTTOU, +- [SIGURG] = TARGET_SIGURG, +- [SIGXCPU] = TARGET_SIGXCPU, +- [SIGXFSZ] = TARGET_SIGXFSZ, +- [SIGVTALRM] = TARGET_SIGVTALRM, +- [SIGPROF] = TARGET_SIGPROF, +- [SIGWINCH] = TARGET_SIGWINCH, +- [SIGIO] = TARGET_SIGIO, +- [SIGPWR] = TARGET_SIGPWR, +- [SIGSYS] = TARGET_SIGSYS, ++#define MAKE_SIG_ENTRY(sig) [sig] = TARGET_##sig, ++ MAKE_SIGNAL_LIST ++#undef MAKE_SIG_ENTRY + /* next signals stay the same */ + }; + +diff --git a/linux-user/strace.c b/linux-user/strace.c +index 37d66d0dff..019fa329f1 100644 +--- a/linux-user/strace.c ++++ b/linux-user/strace.c +@@ -17,6 +17,7 @@ + #include "qemu.h" + #include "user-internals.h" + #include "strace.h" ++#include "signal-common.h" + + struct syscallname { + int nr; +@@ -141,30 +142,21 @@ if( cmd == val ) { \ + qemu_log("%d", cmd); + } + ++static const char * const target_signal_name[] = { ++#define MAKE_SIG_ENTRY(sig) [TARGET_##sig] = #sig, ++ MAKE_SIGNAL_LIST ++#undef MAKE_SIG_ENTRY ++}; ++ + static void + print_signal(abi_ulong arg, int last) + { + const char *signal_name = NULL; +- switch(arg) { +- case TARGET_SIGHUP: signal_name = "SIGHUP"; break; +- case TARGET_SIGINT: signal_name = "SIGINT"; break; +- case TARGET_SIGQUIT: signal_name = "SIGQUIT"; break; +- case TARGET_SIGILL: signal_name = "SIGILL"; break; +- case TARGET_SIGABRT: signal_name = "SIGABRT"; break; +- case TARGET_SIGFPE: signal_name = "SIGFPE"; break; +- case TARGET_SIGKILL: signal_name = "SIGKILL"; break; +- case TARGET_SIGSEGV: signal_name = "SIGSEGV"; break; +- case TARGET_SIGPIPE: signal_name = "SIGPIPE"; break; +- case TARGET_SIGALRM: signal_name = "SIGALRM"; break; +- case TARGET_SIGTERM: signal_name = "SIGTERM"; break; +- case TARGET_SIGUSR1: signal_name = "SIGUSR1"; break; +- case TARGET_SIGUSR2: signal_name = "SIGUSR2"; break; +- case TARGET_SIGCHLD: signal_name = "SIGCHLD"; break; +- case TARGET_SIGCONT: signal_name = "SIGCONT"; break; +- case TARGET_SIGSTOP: signal_name = "SIGSTOP"; break; +- case TARGET_SIGTTIN: signal_name = "SIGTTIN"; break; +- case TARGET_SIGTTOU: signal_name = "SIGTTOU"; break; ++ ++ if (arg < ARRAY_SIZE(target_signal_name)) { ++ signal_name = target_signal_name[arg]; + } ++ + if (signal_name == NULL) { + print_raw_param("%ld", arg, last); + return; +-- +2.33.0 + diff --git a/qemu-bswap-Undefine-CPU_CONVERT-once-done.patch b/qemu-bswap-Undefine-CPU_CONVERT-once-done.patch new file mode 100644 index 00000000..f4b32422 --- /dev/null +++ b/qemu-bswap-Undefine-CPU_CONVERT-once-done.patch @@ -0,0 +1,37 @@ +From 2eb8238d0a6ed3ba3d85756b7ae954cb11ad6de9 Mon Sep 17 00:00:00 2001 +From: Zhang Jiao +Date: Tue, 12 Nov 2024 14:10:39 +0800 +Subject: [PATCH] qemu/bswap: Undefine CPU_CONVERT() once done +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +cheery-pick from 1d73353f236209e9b5987d7c6b30b2a32b739210 + +Better undefined macros once we are done with them, +like we do few lines later with DO_STN_LDN_P(). + +Signed-off-by: Philippe Mathieu-Daudé philmd@linaro.org +Reviewed-by: Thomas Huth thuth@redhat.com +Message-Id: 20241003234211.53644-2-philmd@linaro.org +Signed-off-by: Zhang Jiao +--- + include/qemu/bswap.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/include/qemu/bswap.h b/include/qemu/bswap.h +index 2d3bb8bbed..d8364f5011 100644 +--- a/include/qemu/bswap.h ++++ b/include/qemu/bswap.h +@@ -183,6 +183,8 @@ CPU_CONVERT(le, 16, uint16_t) + CPU_CONVERT(le, 32, uint32_t) + CPU_CONVERT(le, 64, uint64_t) + ++#undef CPU_CONVERT ++ + /* + * Same as cpu_to_le{16,32}, except that gcc will figure the result is + * a compile-time constant if you pass in a constant. So this can be +-- +2.33.0 + diff --git a/qemu.spec b/qemu.spec index f671af52..30b4f436 100644 --- a/qemu.spec +++ b/qemu.spec @@ -3,7 +3,7 @@ Name: qemu Version: 6.2.0 -Release: 103 +Release: 104 Epoch: 10 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 @@ -1120,6 +1120,12 @@ Patch1105: chardev-baum-Use-definitions-to-avoid-dynamic-stack-.patch Patch1106: linux-user-use-max-instead-of-qemu32-qemu64-by-defau.patch Patch1107: intel_iommu-Add-missed-sanity-check-for-256-bit-inva.patch Patch1108: Introduce-the-SM4-cipher-algorithms-OSCCA-GB-T-32907.patch +Patch1109: intel_iommu-Add-missed-reserved-bit-check-for-IEC-de.patch +Patch1110: 9pfs-fix-crash-on-Treaddir-request.patch +Patch1111: s390x-ap-fix-missing-subsystem-reset-registration.patch +Patch1112: qemu-bswap-Undefine-CPU_CONVERT-once-done.patch +Patch1113: linux-user-Add-missing-signals-in-strace-output.patch +Patch1114: linux-user-Add-missing-clock_gettime64-syscall-strac.patch BuildRequires: flex @@ -1719,6 +1725,14 @@ getent passwd qemu >/dev/null || \ %endif %changelog +* Tue Dec 17 2024 - 10:6.2.0-104 +- intel_iommu: Add missed reserved bit check for IEC descriptor +- 9pfs: fix crash on 'Treaddir' request +- s390x/ap: fix missing subsystem reset registration +- qemu/bswap: Undefine CPU_CONVERT() once done +- linux-user: Add missing signals in strace output +- linux-user: Add missing clock_gettime64() syscall strace + * Sat Nov 30 2024 - 10:6.2.0-103 - Introduce the SM4 cipher algorithms (OSCCA GB/T 32907-2016). - intel_iommu: Add missed sanity check for 256-bit invalidation queue diff --git a/s390x-ap-fix-missing-subsystem-reset-registration.patch b/s390x-ap-fix-missing-subsystem-reset-registration.patch new file mode 100644 index 00000000..4f8c91e3 --- /dev/null +++ b/s390x-ap-fix-missing-subsystem-reset-registration.patch @@ -0,0 +1,37 @@ +From 2cf94012e42acf9eb9f4816a9b302940e9d28603 Mon Sep 17 00:00:00 2001 +From: Zhang Jiao +Date: Tue, 12 Nov 2024 13:45:48 +0800 +Subject: [PATCH] s390x/ap: fix missing subsystem reset registration + +cheery-pick from 297ec01f0b9864ea8209ca0ddc6643b4c0574bdb + +A subsystem reset contains a reset of AP resources which has been +missing. Adding the AP bridge to the list of device types that need +reset fixes this issue. + +Reviewed-by: Jason J. Herne +Reviewed-by: Tony Krowiak +Signed-off-by: Janosch Frank +Fixes: a51b3153 ("s390x/ap: base Adjunct Processor (AP) object model") +Message-ID: <20230823142219.1046522-2-seiden@linux.ibm.com> +Signed-off-by: Thomas Huth +Signed-off-by: Zhang Jiao +--- + hw/s390x/s390-virtio-ccw.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c +index c84b89ba43..0a57399b75 100644 +--- a/hw/s390x/s390-virtio-ccw.c ++++ b/hw/s390x/s390-virtio-ccw.c +@@ -99,6 +99,7 @@ static const char *const reset_dev_types[] = { + "s390-flic", + "diag288", + TYPE_S390_PCI_HOST_BRIDGE, ++ TYPE_AP_BRIDGE, + }; + + static void subsystem_reset(void) +-- +2.33.0 + -- Gitee