[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1035297: unblock: qemu/1:7.2+dfsg-6



Control: tags -1 moreinfo

On 2023-04-30 11:07:51 +0300, Michael Tokarev wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: unblock
> X-Debbugs-Cc: pkg-qemu-devel@lists.alioth.debian.org
> 
> Please unblock package qemu
> 
> This debian release has the following:
> 
> 1. sync with upstream qemu stable/bugfix 7.2.1 release, by removing
>    all patches in debian/patches/master/ and replacing them all with
>    single debian/patches/v7.2.1.diff which is a diff between upstream
>    qemu 7.2.0 and 7.2.1 releases.  This is a bulk of the changes in there.
>    See "Other info" section below for more information.
> 
> 2. Includes upstream qemu stable/bugfix 7.2.2 release.
>    Upstream 7.2.2 needs its own comment.  Historically, qemu stable
>    were managed up until next major release is out.  Here, 7.2.2
>    was planned to be tagged the next day after 8.0.0 has been
>    released (8.0 release didn't follow its schedule because of the
>    amount of bugfixes needed there).  So by the historical practice
>    7.2.2 should not be released. But I plan to change this practice,
>    by providing a bit more support for previous major release of
>    qemu, past the next major release date, and also plan to perform
>    at least one more 7.2 upstream stable/bugfix release. We're
>    discussing this on the qemu side.  Either way, 7.2.2 is officially
>    tagged in the upstream qemu git tree:
>       https://gitlab.com/qemu-project/qemu/-/tags/v7.2.2
>    so it's only matter of making a tarball out of it and making
>    an official announcement.

So why is that added as a patch instead of uploading the new upstream
release?

Cheers

> 
> 3. Includes a few more fixes which are taken from the upstream
>    development mailing list, targetting next upstream releases
>    (including stable), which fixes known issues.
> 
> 4. Includes minor changes in the debian packaging, like fixing
>    FTBFS due to unportable usage of \n escapes with echo and
>    switching gbp.conf from master branch to debian-bookworm
>    branch, and also includes the forgotten .desktop file which
>    results in a missing icon file for qemu-system processes.
> 
> The whole thing seems quite large, and when you look at the diffstat
> it is large: >3k LOC changed. But this is mostly due to the conversion
> from debian/patches/master/* to debian/patches/v7.2.1.diff.
> 
> [ Reason ]
> 
> This debian release has numerous bug fixes which affects many aspects
> of qemu functionality within debian.  I will be targetting bookworm
> proposed updates with the same functionality if it misses initial
> bookworm release.  This also includes a fix for relatively old issue
> which is more specific to debian: aptitude segfaulted within qemu-user
> environments, #811087.
> 
> [ Tests ]
> 
> The release is well-tested, as it is usual for all qemu stable releases,
> due to qemu excellent CI/testsuite.  I verified it, together with extra
> changes, wihin my set of tests too.  The extra changes (on top of 7.2.2)
> has also been discussed and tested.
> 
> [ Risks ]
> 
> As usual, the risk of breaking something do exists.  Some unusual use
> case or guest which we didn't cover by testing and don't yet know about.
> Still, the amount of real, actual fixes included is much more than possible
> breakage.
> 
> [ Checklist ]
>   [x] all changes are documented in the d/changelog
>   [x] I reviewed all changes and I approve them
>   [x] attach debdiff against the package in testing
> 
> [ Other info ]
> 
> Since the direct diff between 1:7.2+dfsg-5 and 1:7.2+dfsg-6 is quite large,
> it's difficult to review.  So I'm including 2 diffs instead.
> 
> 1. 7.2+dfsg-6~no-v7.2.2.diff - I made an intermediate "syncing point"
> debian "release", which is just a sync with upstream 7.2.1. This diff
> is a difference in *source* (excluding debian/ but including d/patches
> parts) between extracted 7.2+dfsg-5 and 7.2+dfsg-6 but without the v7.2.2.diff
> and the extra 7.2+dfsg-6 patches.  This diff shows just the sync between
> debian qemu and 7.2.1 upstream qemu release, plus the changes in d/patches
> which made it. The change in here is just 4 commits:
>   version bump to 7.2.1
>   block: Handle curl 7.55.0, 7.85.0 version changes
>   build-sys: fix crlf-ending C code (only affects win32 builds)
>   tests/tcg: fix unused variable in linux-test (fix test failure)
> all can be found here: https://gitlab.com/qemu-project/qemu/-/commits/v7.2.1
> 
> 2. From 7.2+dfsg~6-no-v7.2.2, there's another diff to the final 7.2+dfsg-6
> release, now comparing debian/ parts only.  This includes addition of
> v7.2.2.diff (and removal of CVE-2022-1050.patch), addition of 3 other
> patches to the source fixing more bugs, and other changes to debian/.
> All individual changes in v7.2.2.diff are available at
> https://gitlab.com/qemu-project/qemu/-/commits/v7.2.2 - it contains
> a bunch of various bugfixes in individual commits with descriptions.
> 
> 
> If this is too difficult for the release team to handle, I'm open to
> changing it somehow. All changes, in my opinion, are worth to have in
> bookworm, each and all were thought about with care.
> 
> unblock qemu/1:7.2+dfsg-6
> 
> === begin changelog
> qemu (1:7.2+dfsg-6) unstable; urgency=medium
> 
>   [ Michael Tokarev ]
>   * sync with upstream v7.2.1 stable release, into d/patches/v7.2.1.diff.
>     All patches from 7.2.1 (besides stuff not relevant for linux, such
>     as mingw compilation fixes) has already been in d/patches/master/,
>     now they're in single upstream patch file
>   * v7.2.2.diff: upstream 7.2.2 stable/bugfix release
>   * hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch:
>     remove, included in v7.2.2
>   * d/rules, d/qemu.desktop: provide an icon for gtk display (qemu.display)
>   * d/gbp.conf: set debian branch to debian-bookworm
>   * pick 3 more fixes from qemu-devel@:
>     rtl8139-fix-large_send_mss-divide-by-zero.patch
>     target_i386-Change-wrong-XFRM-value.patch
>     hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch
>   * +linux-user-fix-getgroups-setgroups-allocations.patch (Closes: #811087)
> 
>   [ Vagrant Cascadian ]
>   * debian/rules: Use 'printf' instead of 'echo' to avoid differences
>     in underlying /bin/sh implementations. Closes: #1034431
> 
>  -- Michael Tokarev <mjt@tls.msk.ru>  Sat, 29 Apr 2023 13:02:55 +0300
> 
> 
> === begin 7.2+dfsg-6~no-v7.2.2.diff
>  qemu-7.2+dfsg-6-no-v7.2.2/VERSION                                |    2 
>  qemu-7.2+dfsg-6-no-v7.2.2/block/curl.c                           |   44 ++++++++-
>  qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/series                  |   46 ----------
>  qemu-7.2+dfsg-5/debian/patches/master                            |only
>  qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/v7.2.1.diff             |only
>  qemu-7.2+dfsg-6-no-v7.2.2/meson.build                            |    2 
>  qemu-7.2+dfsg-5/scripts/shaderinclude.pl                         |only
>  qemu-7.2+dfsg-6-no-v7.2.2/scripts/shaderinclude.py               |only
>  qemu-7.2+dfsg-6-no-v7.2.2/tests/tcg/multiarch/linux/linux-test.c |    6 +
>  9 files changed, 45 insertions(+), 55 deletions(-)
> 
> diff -upr qemu-7.2+dfsg-5/debian/patches/series qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/series
> --- qemu-7.2+dfsg-5/debian/patches/series	2023-03-05 20:03:09.000000000 +0300
> +++ qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/series	2023-04-30 10:37:10.747921243 +0300
> @@ -1,3 +1,4 @@
> +v7.2.1.diff
>  microvm-default-machine-type.patch
>  skip-meson-pc-bios.diff
>  linux-user-binfmt-P.diff
> @@ -15,48 +16,3 @@ openbios-spelling-endianess.patch
>  slof-spelling-seperator.patch
>  ignore-roms-dependency-in-qtest.patch
>  hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch
> -# patches from qemu master branch which are for -stable:
> -master/target-sh4-Mask-restore-of-env-flags-from-tb-flags.patch
> -master/vhost-fix-vq-dirty-bitmap-syncing-when-vIOMMU-is-ena.patch
> -master/virtio-mem-Fix-the-bitmap-index-of-the-section-offse.patch
> -master/virtio-mem-Fix-the-iterator-variable-in-a-vmem-rdl_l.patch
> -master/target-arm-fix-handling-of-HLT-semihosting-in-system.patch
> -master/meson-accept-relative-symlinks-in-meson-introspect-i.patch
> -master/target-riscv-Set-pc_succ_insn-for-rvc-illegal-insn.patch
> -master/acpi-cpuhp-fix-guest-visible-maximum-access-size-to-.patch
> -master/hw-nvme-fix-missing-endian-conversions-for-doorbell-.patch
> -master/hw-nvme-fix-missing-cq-eventidx-update.patch
> -master/configure-fix-GLIB_VERSION-for-cross-compilation.patch
> -master/target-arm-Fix-sve_probe_page.patch
> -master/target-arm-allow-writes-to-SCR_EL3.HXEn-bit-when-FEA.patch
> -master/target-arm-Fix-in_debug-path-in-S1_ptw_translate.patch
> -master/target-arm-Fix-physical-address-resolution-for-Stage2.patch
> -master/migration-ram-Fix-error-handling-in-ram_write_tracki.patch
> -master/migration-ram-Fix-populate_read_range.patch
> -master/qcow2-Fix-theoretical-corruption-in-store_bitmap-err.patch
> -master/block-fix-detect-zeroes-with-BDRV_REQ_REGISTERED_BUF.patch
> -master/tests-tcg-i386-Introduce-and-use-reg_t-consistently.patch
> -master/target-i386-Fix-BEXTR-instruction.patch
> -master/target-i386-Fix-C-flag-for-BLSI-BLSMSK-BLSR.patch
> -master/target-i386-fix-ADOX-followed-by-ADCX.patch
> -master/target-i386-Fix-BZHI-instruction.patch
> -master/block-iscsi-fix-double-free-on-BUSY-or-similar-status.patch
> -master/hw-smbios-fix-field-corruption-in-type-4-table.patch
> -master/Revert-x86-do-not-re-randomize-RNG-seed-on-snapshot-.patch
> -master/Revert-x86-re-initialize-RNG-seed-when-selecting-ker.patch
> -master/Revert-x86-reinitialize-RNG-seed-on-system-reboot.patch
> -master/Revert-x86-use-typedef-for-SetupData-struct.patch
> -master/Revert-x86-return-modified-setup_data-only-if-read-a.patch
> -master/Revert-hw-i386-pass-RNG-seed-via-setup_data-entry.patch
> -master/vhost-user-gpio-Configure-vhost_dev-when-connecting.patch
> -master/vhost-user-i2c-Back-up-vqs-before-cleaning-up-vhost_.patch
> -master/vhost-user-rng-Back-up-vqs-before-cleaning-up-vhost_.patch
> -master/virtio-rng-pci-fix-migration-compat-for-vectors.patch
> -master/virtio-rng-pci-fix-transitional-migration-compat-for.patch
> -master/hw-timer-hpet-Fix-expiration-time-overflow.patch
> -master/vdpa-stop-all-svq-on-device-deletion.patch
> -master/vhost-avoid-a-potential-use-of-an-uninitialized-vari.patch
> -master/libvhost-user-check-for-NULL-when-allocating-a-virtq.patch
> -master/chardev-char-socket-set-s-listener-NULL-in-char_sock.patch
> -master/intel-iommu-fail-MAP-notifier-without-caching-mode.patch
> -master/intel-iommu-fail-DEVIOTLB_UNMAP-without-dt-mode.patch
> Only in qemu-7.2+dfsg-5/debian/patches: master
> Only in qemu-7.2+dfsg-6-no-v7.2.2/debian/patches: v7.2.1.diff
> 
> diff -upr -xdebian -x.pc qemu-7.2+dfsg-5/block/curl.c qemu-7.2+dfsg-6-no-v7.2.2/block/curl.c
> --- qemu-7.2+dfsg-5/block/curl.c	2022-12-14 19:28:45.000000000 +0300
> +++ qemu-7.2+dfsg-6-no-v7.2.2/block/curl.c	2023-04-30 10:39:07.316967149 +0300
> @@ -37,8 +37,15 @@
>  
>  // #define DEBUG_VERBOSE
>  
> +/* CURL 7.85.0 switches to a string based API for specifying
> + * the desired protocols.
> + */
> +#if LIBCURL_VERSION_NUM >= 0x075500
> +#define PROTOCOLS "HTTP,HTTPS,FTP,FTPS"
> +#else
>  #define PROTOCOLS (CURLPROTO_HTTP | CURLPROTO_HTTPS | \
>                     CURLPROTO_FTP | CURLPROTO_FTPS)
> +#endif
>  
>  #define CURL_NUM_STATES 8
>  #define CURL_NUM_ACB    8
> @@ -509,9 +516,18 @@ static int curl_init_state(BDRVCURLState
>           * obscure protocols.  For example, do not allow POP3/SMTP/IMAP see
>           * CVE-2013-0249.
>           *
> -         * Restricting protocols is only supported from 7.19.4 upwards.
> +         * Restricting protocols is only supported from 7.19.4 upwards. Note:
> +         * version 7.85.0 deprecates CURLOPT_*PROTOCOLS in favour of a string
> +         * based CURLOPT_*PROTOCOLS_STR API.
>           */
> -#if LIBCURL_VERSION_NUM >= 0x071304
> +#if LIBCURL_VERSION_NUM >= 0x075500
> +        if (curl_easy_setopt(state->curl,
> +                             CURLOPT_PROTOCOLS_STR, PROTOCOLS) ||
> +            curl_easy_setopt(state->curl,
> +                             CURLOPT_REDIR_PROTOCOLS_STR, PROTOCOLS)) {
> +            goto err;
> +        }
> +#elif LIBCURL_VERSION_NUM >= 0x071304
>          if (curl_easy_setopt(state->curl, CURLOPT_PROTOCOLS, PROTOCOLS) ||
>              curl_easy_setopt(state->curl, CURLOPT_REDIR_PROTOCOLS, PROTOCOLS)) {
>              goto err;
> @@ -669,7 +685,12 @@ static int curl_open(BlockDriverState *b
>      const char *file;
>      const char *cookie;
>      const char *cookie_secret;
> -    double d;
> +    /* CURL >= 7.55.0 uses curl_off_t for content length instead of a double */
> +#if LIBCURL_VERSION_NUM >= 0x073700
> +    curl_off_t cl;
> +#else
> +    double cl;
> +#endif
>      const char *secretid;
>      const char *protocol_delimiter;
>      int ret;
> @@ -796,27 +817,36 @@ static int curl_open(BlockDriverState *b
>      }
>      if (curl_easy_perform(state->curl))
>          goto out;
> -    if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d)) {
> +    /* CURL 7.55.0 deprecates CURLINFO_CONTENT_LENGTH_DOWNLOAD in favour of
> +     * the *_T version which returns a more sensible type for content length.
> +     */
> +#if LIBCURL_VERSION_NUM >= 0x073700
> +    if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl)) {
>          goto out;
>      }
> +#else
> +    if (curl_easy_getinfo(state->curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl)) {
> +        goto out;
> +    }
> +#endif
>      /* Prior CURL 7.19.4 return value of 0 could mean that the file size is not
>       * know or the size is zero. From 7.19.4 CURL returns -1 if size is not
>       * known and zero if it is really zero-length file. */
>  #if LIBCURL_VERSION_NUM >= 0x071304
> -    if (d < 0) {
> +    if (cl < 0) {
>          pstrcpy(state->errmsg, CURL_ERROR_SIZE,
>                  "Server didn't report file size.");
>          goto out;
>      }
>  #else
> -    if (d <= 0) {
> +    if (cl <= 0) {
>          pstrcpy(state->errmsg, CURL_ERROR_SIZE,
>                  "Unknown file size or zero-length file.");
>          goto out;
>      }
>  #endif
>  
> -    s->len = d;
> +    s->len = cl;
>  
>      if ((!strncasecmp(s->url, "http://";, strlen("http://";))
>          || !strncasecmp(s->url, "https://";, strlen("https://";)))
> diff -upr -xdebian -x.pc qemu-7.2+dfsg-5/meson.build qemu-7.2+dfsg-6-no-v7.2.2/meson.build
> --- qemu-7.2+dfsg-5/meson.build	2023-04-30 09:54:08.000000000 +0300
> +++ qemu-7.2+dfsg-6-no-v7.2.2/meson.build	2023-04-30 10:39:07.344968369 +0300
> @@ -2777,7 +2777,7 @@ config_host_data.set('CONFIG_SLIRP', sli
>  genh += configure_file(output: 'config-host.h', configuration: config_host_data)
>  
>  hxtool = find_program('scripts/hxtool')
> -shaderinclude = find_program('scripts/shaderinclude.pl')
> +shaderinclude = find_program('scripts/shaderinclude.py')
>  qapi_gen = find_program('scripts/qapi-gen.py')
>  qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py',
>                       meson.current_source_dir() / 'scripts/qapi/commands.py',
> Only in qemu-7.2+dfsg-5/scripts: shaderinclude.pl
> Only in qemu-7.2+dfsg-6-no-v7.2.2/scripts: shaderinclude.py
> diff -upr -xdebian -x.pc qemu-7.2+dfsg-5/tests/tcg/multiarch/linux/linux-test.c qemu-7.2+dfsg-6-no-v7.2.2/tests/tcg/multiarch/linux/linux-test.c
> --- qemu-7.2+dfsg-5/tests/tcg/multiarch/linux/linux-test.c	2022-12-14 19:28:45.000000000 +0300
> +++ qemu-7.2+dfsg-6-no-v7.2.2/tests/tcg/multiarch/linux/linux-test.c	2023-04-30 10:39:07.324967497 +0300
> @@ -354,13 +354,17 @@ static void test_pipe(void)
>              if (FD_ISSET(fds[0], &rfds)) {
>                  chk_error(read(fds[0], &ch, 1));
>                  rcount++;
> -                if (rcount >= WCOUNT_MAX)
> +                if (rcount >= WCOUNT_MAX) {
>                      break;
> +                }
>              }
>              if (FD_ISSET(fds[1], &wfds)) {
>                  ch = 'a';
>                  chk_error(write(fds[1], &ch, 1));
>                  wcount++;
> +                if (wcount >= WCOUNT_MAX) {
> +                    break;
> +                }
>              }
>          }
>      }
> diff -upr -xdebian -x.pc qemu-7.2+dfsg-5/VERSION qemu-7.2+dfsg-6-no-v7.2.2/VERSION
> --- qemu-7.2+dfsg-5/VERSION	2022-12-14 19:28:45.000000000 +0300
> +++ qemu-7.2+dfsg-6-no-v7.2.2/VERSION	2023-04-30 10:39:07.316967149 +0300
> @@ -1 +1 @@
> -7.2.0
> +7.2.1
> 
> 
> === begin 7.2+dfsg-6.diff
>  changelog                                                          |   24 
>  gbp.conf                                                           |    1 
>  rules                                                              |    5 
>  qemu.desktop                                                       |    8 
>  patches/hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch |   45 
>  patches/hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch  |   42 
>  patches/linux-user-fix-getgroups-setgroups-allocations.patch       |  213 ++++
>  patches/rtl8139-fix-large_send_mss-divide-by-zero.patch            |   68 +
>  patches/target_i386-Change-wrong-XFRM-value.patch                  |   34 
>  patches/v7.2.2.diff                                                |  514 ++++++++++
>  patches/series                                                     |    6 
>  11 files changed, 877 insertions(+), 83 deletions(-)
> 
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/changelog qemu-7.2+dfsg-6/debian/changelog
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/changelog	2023-04-29 13:02:55.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/changelog	2023-03-05 20:09:04.000000000 +0300
> @@ -1,27 +1,3 @@
> -qemu (1:7.2+dfsg-6) unstable; urgency=medium
> -
> -  [ Michael Tokarev ]
> -  * sync with upstream v7.2.1 stable release, into d/patches/v7.2.1.diff.
> -    All patches from 7.2.1 (besides stuff not relevant for linux, such
> -    as mingw compilation fixes) has already been in d/patches/master/,
> -    now they're in single upstream patch file
> -  * v7.2.2.diff: upstream 7.2.2 stable/bugfix release
> -  * hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch:
> -    remove, included in v7.2.2
> -  * d/rules, d/qemu.desktop: provide an icon for gtk display (qemu.display)
> -  * d/gbp.conf: set debian branch to debian-bookworm
> -  * pick 3 more fixes from qemu-devel@:
> -    rtl8139-fix-large_send_mss-divide-by-zero.patch
> -    target_i386-Change-wrong-XFRM-value.patch
> -    hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch
> -  * +linux-user-fix-getgroups-setgroups-allocations.patch (Closes: #811087)
> -
> -  [ Vagrant Cascadian ]
> -  * debian/rules: Use 'printf' instead of 'echo' to avoid differences
> -    in underlying /bin/sh implementations. Closes: #1034431
> -
> - -- Michael Tokarev <mjt@tls.msk.ru>  Sat, 29 Apr 2023 13:02:55 +0300
> -
>  qemu (1:7.2+dfsg-5) unstable; urgency=medium
>  
>    * d/qemu-guest-agent.udev: fix missing comma
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/gbp.conf qemu-7.2+dfsg-6/debian/gbp.conf
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/gbp.conf	2023-04-29 12:05:13.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/gbp.conf	2023-03-05 20:03:09.000000000 +0300
> @@ -1,4 +1,3 @@
>  [DEFAULT]
>  sign-tags = True
>  pristine-tar = True
> -debian-branch = debian-bookworm
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch qemu-7.2+dfsg-6/debian/patches/hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch	1970-01-01 03:00:00.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch	2023-04-29 12:58:18.000000000 +0300
> @@ -0,0 +1,42 @@
> +From: Thomas Huth <thuth@redhat.com>
> +Subject: [PATCH] hw/mips/malta: Fix the malta machine on big endian hosts
> +Date: Thu, 30 Mar 2023 17:26:13 +0200
> +Message-Id: <20230330152613.232082-1-thuth@redhat.com>
> +List-Id: <qemu-stable.nongnu.org>
> +
> +Booting a Linux kernel with the malta machine is currently broken
> +on big endian hosts. The cpu_to_gt32 macro wants to byteswap a value
> +for little endian targets only, but uses the wrong way to do this:
> +cpu_to_[lb]e32 works the other way round on big endian hosts! Fix
> +it by using the same ways on both, big and little endian hosts.
> +
> +Fixes: 0c8427baf0 ("hw/mips/malta: Use bootloader helper to set BAR registers")
> +Signed-off-by: Thomas Huth <thuth@redhat.com>
> +---
> + I've checked that both, the kernel from
> + https://landley.net/toybox/downloads/binaries/mkroot/0.8.9/mipsel.tgz
> + and the kernel from
> + https://landley.net/toybox/downloads/binaries/mkroot/0.8.9/mips.tgz
> + now boot fine on both, a little endian (x86) and a big endian (s390x) host.
> +
> + hw/mips/malta.c | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/hw/mips/malta.c b/hw/mips/malta.c
> +index af9021316d..b26ed1fc9a 100644
> +--- a/hw/mips/malta.c
> ++++ b/hw/mips/malta.c
> +@@ -630,7 +630,7 @@ static void bl_setup_gt64120_jump_kernel(void **p, uint64_t run_addr,
> +     /* Bus endianess is always reversed */
> + #if TARGET_BIG_ENDIAN
> +-#define cpu_to_gt32 cpu_to_le32
> ++#define cpu_to_gt32(x) (x)
> + #else
> +-#define cpu_to_gt32 cpu_to_be32
> ++#define cpu_to_gt32(x) bswap32(x)
> + #endif
> + 
> +-- 
> +2.31.1
> +
> +
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch qemu-7.2+dfsg-6/debian/patches/hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch	2023-04-30 10:33:17.674095770 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch	1970-01-01 03:00:00.000000000 +0300
> @@ -1,45 +0,0 @@
> -From: Yuval Shaia <yuval.shaia.ml@gmail.com>
> -Subject: [PATCH v3] hw/pvrdma: Protect against buggy or malicious guest driver
> -Date: Sun,  3 Apr 2022 12:52:34 +0300
> -Message-Id: <20220403095234.2210-1-yuval.shaia.ml@gmail.com>
> -Content-Type: text/plain; charset="utf-8"
> -MIME-Version: 1.0
> -Content-Transfer-Encoding: 7bit
> -Bug-Debian: https://bugs.debian.org/1014589
> -
> -Guest driver might execute HW commands when shared buffers are not yet
> -allocated.
> -This could happen on purpose (malicious guest) or because of some other
> -guest/host address mapping error.
> -We need to protect against such case.
> -
> -Fixes: CVE-2022-1050
> -
> -Reported-by: Raven <wxhusst@gmail.com>
> -Signed-off-by: Yuval Shaia <yuval.shaia.ml@gmail.com>
> ----
> -v1 -> v2:
> -	* Commit message changes
> -v2 -> v3:
> -	* Exclude cosmetic changes
> ----
> - hw/rdma/vmw/pvrdma_cmd.c | 6 ++++++
> - 1 file changed, 6 insertions(+)
> -
> -diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c
> -index da7ddfa548..89db963c46 100644
> ---- a/hw/rdma/vmw/pvrdma_cmd.c
> -+++ b/hw/rdma/vmw/pvrdma_cmd.c
> -@@ -796,6 +796,12 @@ int pvrdma_exec_cmd(PVRDMADev *dev)
> - 
> -     dsr_info = &dev->dsr_info;
> - 
> -+    if (!dsr_info->dsr) {
> -+            /* Buggy or malicious guest driver */
> -+            rdma_error_report("Exec command without dsr, req or rsp buffers");
> -+            goto out;
> -+    }
> -+
> -     if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) /
> -                       sizeof(struct cmd_handler)) {
> -         rdma_error_report("Unsupported command");
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/linux-user-fix-getgroups-setgroups-allocations.patch qemu-7.2+dfsg-6/debian/patches/linux-user-fix-getgroups-setgroups-allocations.patch
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/linux-user-fix-getgroups-setgroups-allocations.patch	1970-01-01 03:00:00.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/linux-user-fix-getgroups-setgroups-allocations.patch	2023-04-26 18:50:55.000000000 +0300
> @@ -0,0 +1,213 @@
> +From b8c5ef59c357946f5982328641c24edd589fff45 Mon Sep 17 00:00:00 2001
> +From: Michael Tokarev <mjt@tls.msk.ru>
> +Date: Fri, 16 Dec 2022 18:07:07 +0300
> +Subject: [PATCH v4] linux-user: fix getgroups/setgroups allocations
> +
> +linux-user getgroups(), setgroups(), getgroups32() and setgroups32()
> +used alloca() to allocate grouplist arrays, with unchecked gidsetsize
> +coming from the "guest".  With NGROUPS_MAX being 65536 (linux, and it
> +is common for an application to allocate NGROUPS_MAX for getgroups()),
> +this means a typical allocation is half the megabyte on the stack.
> +Which just overflows stack, which leads to immediate SIGSEGV in actual
> +system getgroups() implementation.
> +
> +An example of such issue is aptitude, eg
> +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811087#72
> +
> +Cap gidsetsize to NGROUPS_MAX (return EINVAL if it is larger than that),
> +and use heap allocation for grouplist instead of alloca().  While at it,
> +fix coding style and make all 4 implementations identical.
> +
> +Try to not impose random limits - for example, allow gidsetsize to be
> +negative for getgroups() - just do not allocate negative-sized grouplist
> +in this case but still do actual getgroups() call.  But do not allow
> +negative gidsetsize for setgroups() since its argument is unsigned.
> +
> +Capping by NGROUPS_MAX seems a bit arbitrary, - we can do more, it is
> +not an error if set size will be NGROUPS_MAX+1. But we should not allow
> +integer overflow for the array being allocated. Maybe it is enough to
> +just call g_try_new() and return ENOMEM if it fails.
> +
> +Maybe there's also no need to convert setgroups() since this one is
> +usually smaller and known beforehand (KERN_NGROUPS_MAX is actually 63, -
> +this is apparently a kernel-imposed limit for runtime group set).
> +
> +The patch fixes aptitude segfault mentioned above.
> +
> +Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> +---
> +v4:
> + - the same ret-vs-gidsetsize fix in getgroups32.
> +v3:
> + - fix a bug in getgroups(). In initial implementation I checked
> +   for ret>0 in order to convert returned list of groups to target
> +   byte order. But this clashes with unusual corner case for this
> +   syscall: getgroups(0,NULL) return current number of groups in
> +   the set, so this resulted in writing to *NULL. The right condition
> +   here is gidsetsize>0:
> +   -            if (!is_error(ret) && ret > 0) {
> +   +            if (!is_error(ret) && gidsetsize > 0) {
> +v2:
> + - remove g_free, use g_autofree annotations instead,
> + - a bit more coding style changes, makes checkpatch.pl happy
> +
> + linux-user/syscall.c | 99 ++++++++++++++++++++++++++++++--------------
> + 1 file changed, 68 insertions(+), 31 deletions(-)
> +
> +diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> +index 24b25759be..c532ee92c1 100644
> +--- a/linux-user/syscall.c
> ++++ b/linux-user/syscall.c
> +@@ -11433,39 +11433,58 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> +         {
> +             int gidsetsize = arg1;
> +             target_id *target_grouplist;
> +-            gid_t *grouplist;
> ++            g_autofree gid_t *grouplist = NULL;
> +             int i;
> + 
> +-            grouplist = alloca(gidsetsize * sizeof(gid_t));
> ++            if (gidsetsize > NGROUPS_MAX) {
> ++                return -TARGET_EINVAL;
> ++            }
> ++            if (gidsetsize > 0) {
> ++                grouplist = g_try_new(gid_t, gidsetsize);
> ++                if (!grouplist) {
> ++                    return -TARGET_ENOMEM;
> ++                }
> ++            }
> +             ret = get_errno(getgroups(gidsetsize, grouplist));
> +-            if (gidsetsize == 0)
> +-                return ret;
> +-            if (!is_error(ret)) {
> +-                target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * sizeof(target_id), 0);
> +-                if (!target_grouplist)
> ++            if (!is_error(ret) && gidsetsize > 0) {
> ++                target_grouplist = lock_user(VERIFY_WRITE, arg2,
> ++                                             gidsetsize * sizeof(target_id), 0);
> ++                if (!target_grouplist) {
> +                     return -TARGET_EFAULT;
> +-                for(i = 0;i < ret; i++)
> ++                }
> ++                for (i = 0; i < ret; i++) {
> +                     target_grouplist[i] = tswapid(high2lowgid(grouplist[i]));
> +-                unlock_user(target_grouplist, arg2, gidsetsize * sizeof(target_id));
> ++                }
> ++                unlock_user(target_grouplist, arg2,
> ++                            gidsetsize * sizeof(target_id));
> +             }
> ++            return ret;
> +         }
> +-        return ret;
> +     case TARGET_NR_setgroups:
> +         {
> +             int gidsetsize = arg1;
> +             target_id *target_grouplist;
> +-            gid_t *grouplist = NULL;
> ++            g_autofree gid_t *grouplist = NULL;
> +             int i;
> +-            if (gidsetsize) {
> +-                grouplist = alloca(gidsetsize * sizeof(gid_t));
> +-                target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * sizeof(target_id), 1);
> ++
> ++            if (gidsetsize > NGROUPS_MAX || gidsetsize < 0) {
> ++                return -TARGET_EINVAL;
> ++            }
> ++            if (gidsetsize > 0) {
> ++                grouplist = g_try_new(gid_t, gidsetsize);
> ++                if (!grouplist) {
> ++                    return -TARGET_ENOMEM;
> ++                }
> ++                target_grouplist = lock_user(VERIFY_READ, arg2,
> ++                                             gidsetsize * sizeof(target_id), 1);
> +                 if (!target_grouplist) {
> +                     return -TARGET_EFAULT;
> +                 }
> +                 for (i = 0; i < gidsetsize; i++) {
> +                     grouplist[i] = low2highgid(tswapid(target_grouplist[i]));
> +                 }
> +-                unlock_user(target_grouplist, arg2, 0);
> ++                unlock_user(target_grouplist, arg2,
> ++                            gidsetsize * sizeof(target_id));
> +             }
> +             return get_errno(setgroups(gidsetsize, grouplist));
> +         }
> +@@ -11750,41 +11769,59 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> +         {
> +             int gidsetsize = arg1;
> +             uint32_t *target_grouplist;
> +-            gid_t *grouplist;
> ++            g_autofree gid_t *grouplist = NULL;
> +             int i;
> + 
> +-            grouplist = alloca(gidsetsize * sizeof(gid_t));
> ++            if (gidsetsize > NGROUPS_MAX) {
> ++                return -TARGET_EINVAL;
> ++            }
> ++            if (gidsetsize > 0) {
> ++                grouplist = g_try_new(gid_t, gidsetsize);
> ++                if (!grouplist) {
> ++                    return -TARGET_ENOMEM;
> ++                }
> ++            }
> +             ret = get_errno(getgroups(gidsetsize, grouplist));
> +-            if (gidsetsize == 0)
> +-                return ret;
> +-            if (!is_error(ret)) {
> +-                target_grouplist = lock_user(VERIFY_WRITE, arg2, gidsetsize * 4, 0);
> ++            if (!is_error(ret) && gidsetsize > 0) {
> ++                target_grouplist = lock_user(VERIFY_WRITE, arg2,
> ++                                             gidsetsize * 4, 0);
> +                 if (!target_grouplist) {
> +                     return -TARGET_EFAULT;
> +                 }
> +-                for(i = 0;i < ret; i++)
> ++                for (i = 0; i < ret; i++) {
> +                     target_grouplist[i] = tswap32(grouplist[i]);
> ++                }
> +                 unlock_user(target_grouplist, arg2, gidsetsize * 4);
> +             }
> ++            return ret;
> +         }
> +-        return ret;
> + #endif
> + #ifdef TARGET_NR_setgroups32
> +     case TARGET_NR_setgroups32:
> +         {
> +             int gidsetsize = arg1;
> +             uint32_t *target_grouplist;
> +-            gid_t *grouplist;
> ++            g_autofree gid_t *grouplist = NULL;
> +             int i;
> + 
> +-            grouplist = alloca(gidsetsize * sizeof(gid_t));
> +-            target_grouplist = lock_user(VERIFY_READ, arg2, gidsetsize * 4, 1);
> +-            if (!target_grouplist) {
> +-                return -TARGET_EFAULT;
> ++            if (gidsetsize > NGROUPS_MAX || gidsetsize < 0) {
> ++                return -TARGET_EINVAL;
> ++            }
> ++            if (gidsetsize > 0) {
> ++                grouplist = g_try_new(gid_t, gidsetsize);
> ++                if (!grouplist) {
> ++                    return -TARGET_ENOMEM;
> ++                }
> ++                target_grouplist = lock_user(VERIFY_READ, arg2,
> ++                                             gidsetsize * 4, 1);
> ++                if (!target_grouplist) {
> ++                    return -TARGET_EFAULT;
> ++                }
> ++                for (i = 0; i < gidsetsize; i++) {
> ++                    grouplist[i] = tswap32(target_grouplist[i]);
> ++                }
> ++                unlock_user(target_grouplist, arg2, 0);
> +             }
> +-            for(i = 0;i < gidsetsize; i++)
> +-                grouplist[i] = tswap32(target_grouplist[i]);
> +-            unlock_user(target_grouplist, arg2, 0);
> +             return get_errno(setgroups(gidsetsize, grouplist));
> +         }
> + #endif
> +-- 
> +2.30.2
> +
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/rtl8139-fix-large_send_mss-divide-by-zero.patch qemu-7.2+dfsg-6/debian/patches/rtl8139-fix-large_send_mss-divide-by-zero.patch
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/rtl8139-fix-large_send_mss-divide-by-zero.patch	1970-01-01 03:00:00.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/rtl8139-fix-large_send_mss-divide-by-zero.patch	2023-04-26 18:50:55.000000000 +0300
> @@ -0,0 +1,68 @@
> +From: Stefan Hajnoczi <stefanha@redhat.com>
> +Subject: [PATCH] rtl8139: fix large_send_mss divide-by-zero
> +Date: Thu, 13 Apr 2023 13:19:46 -0400
> +Message-Id: <20230413171946.2865726-1-stefanha@redhat.com>
> +List-Id: <qemu-devel.nongnu.org>
> +
> +If the driver sets large_send_mss to 0 then a divide-by-zero occurs.
> +Even if the division wasn't a problem, the for loop that emits MSS-sized
> +packets would never terminate.
> +
> +Solve these issues by skipping offloading when large_send_mss=0.
> +
> +This issue was found by OSS-Fuzz as part of Alexander Bulekov's device
> +fuzzing work. The reproducer is:
> +
> +  $ cat << EOF | ./qemu-system-i386 -display none -machine accel=qtest, -m \
> +  512M,slots=1,maxmem=0xffff000000000000 -machine q35 -nodefaults -device \
> +  rtl8139,netdev=net0 -netdev user,id=net0 -device \
> +  pc-dimm,id=nv1,memdev=mem1,addr=0xb800a64602800000 -object \
> +  memory-backend-ram,id=mem1,size=2M  -qtest stdio
> +  outl 0xcf8 0x80000814
> +  outl 0xcfc 0xe0000000
> +  outl 0xcf8 0x80000804
> +  outw 0xcfc 0x06
> +  write 0xe0000037 0x1 0x04
> +  write 0xe00000e0 0x2 0x01
> +  write 0x1 0x1 0x04
> +  write 0x3 0x1 0x98
> +  write 0xa 0x1 0x8c
> +  write 0xb 0x1 0x02
> +  write 0xc 0x1 0x46
> +  write 0xd 0x1 0xa6
> +  write 0xf 0x1 0xb8
> +  write 0xb800a646028c000c 0x1 0x08
> +  write 0xb800a646028c000e 0x1 0x47
> +  write 0xb800a646028c0010 0x1 0x02
> +  write 0xb800a646028c0017 0x1 0x06
> +  write 0xb800a646028c0036 0x1 0x80
> +  write 0xe00000d9 0x1 0x40
> +  EOF
> +
> +Buglink: https://gitlab.com/qemu-project/qemu/-/issues/1582
> +Fixes: 6d71357a3b65 ("rtl8139: honor large send MSS value")
> +Reported-by: Alexander Bulekov <alxndr@bu.edu>
> +Cc: Peter Maydell <peter.maydell@linaro.org>
> +Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> +---
> + hw/net/rtl8139.c | 3 +++
> + 1 file changed, 3 insertions(+)
> +
> +diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c
> +index 5a5aaf868d..5f1a4d359b 100644
> +--- a/hw/net/rtl8139.c
> ++++ b/hw/net/rtl8139.c
> +@@ -2154,6 +2154,9 @@ static int rtl8139_cplus_transmit_one(RTL8139State *s)
> + 
> +                 int large_send_mss = (txdw0 >> CP_TC_LGSEN_MSS_SHIFT) &
> +                                      CP_TC_LGSEN_MSS_MASK;
> ++                if (large_send_mss == 0) {
> ++                    goto skip_offload;
> ++                }
> + 
> +                 DPRINTF("+++ C+ mode offloaded task TSO IP data %d "
> +                     "frame data %d specified MSS=%d\n",
> +-- 
> +2.39.2
> +
> +
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/series qemu-7.2+dfsg-6/debian/patches/series
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/series	2023-04-30 10:37:10.747921243 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/series	2023-04-29 12:57:45.000000000 +0300
> @@ -1,4 +1,5 @@
>  v7.2.1.diff
> +v7.2.2.diff
>  microvm-default-machine-type.patch
>  skip-meson-pc-bios.diff
>  linux-user-binfmt-P.diff
> @@ -15,4 +16,7 @@ spelling.diff
>  openbios-spelling-endianess.patch
>  slof-spelling-seperator.patch
>  ignore-roms-dependency-in-qtest.patch
> -hw-pvrdma-protect-against-guest-driver-CVE-2022-1050.patch
> +linux-user-fix-getgroups-setgroups-allocations.patch
> +rtl8139-fix-large_send_mss-divide-by-zero.patch
> +target_i386-Change-wrong-XFRM-value.patch
> +hw_mips_malta-Fix-malta-machine-on-big-endian-hosts.patch
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/target_i386-Change-wrong-XFRM-value.patch qemu-7.2+dfsg-6/debian/patches/target_i386-Change-wrong-XFRM-value.patch
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/target_i386-Change-wrong-XFRM-value.patch	1970-01-01 03:00:00.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/target_i386-Change-wrong-XFRM-value.patch	2023-04-26 18:50:55.000000000 +0300
> @@ -0,0 +1,34 @@
> +From: Yang Zhong <yang.zhong@linux.intel.com>
> +Subject: [PATCH v3] target/i386: Change wrong XFRM value
> +Date: Thu,  6 Apr 2023 02:40:41 -0400
> +Message-Id: <20230406064041.420039-1-yang.zhong@linux.intel.com>
> +List-Id: <qemu-devel.nongnu.org>
> +
> +The previous patch wrongly replaced FEAT_XSAVE_XCR0_{LO|HI} with
> +FEAT_XSAVE_XSS_{LO|HI} in CPUID(EAX=12,ECX=1):{ECX,EDX}, which made
> +SGX enclave only supported SSE and x87 feature(xfrm=0x3).
> +
> +Fixes: 301e90675c3f ("target/i386: Enable support for XSAVES based features")
> +
> +Signed-off-by: Yang Zhong <yang.zhong@linux.intel.com>
> +Reviewed-by: Yang Weijiang <weijiang.yang@intel.com>
> +---
> + target/i386/cpu.c | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> +index 6576287e5b..f083ff4335 100644
> +--- a/target/i386/cpu.c
> ++++ b/target/i386/cpu.c
> +@@ -5718,8 +5718,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
> +         } else {
> +             *eax &= env->features[FEAT_SGX_12_1_EAX];
> +             *ebx &= 0; /* ebx reserve */
> +-            *ecx &= env->features[FEAT_XSAVE_XSS_LO];
> +-            *edx &= env->features[FEAT_XSAVE_XSS_HI];
> ++            *ecx &= env->features[FEAT_XSAVE_XCR0_LO];
> ++            *edx &= env->features[FEAT_XSAVE_XCR0_HI];
> + 
> +             /* FP and SSE are always allowed regardless of XSAVE/XCR0. */
> +             *ecx |= XSTATE_FP_MASK | XSTATE_SSE_MASK;
> +
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/v7.2.2.diff qemu-7.2+dfsg-6/debian/patches/v7.2.2.diff
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/patches/v7.2.2.diff	1970-01-01 03:00:00.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/patches/v7.2.2.diff	2023-04-29 12:09:29.000000000 +0300
> @@ -0,0 +1,514 @@
> +Subject: v7.2.2
> +Date: Sat, 29 Apr 2023 12:09:18 +0300
> +From: Michael Tokarev <mjt@tls.msk.ru>
> +Forwarded: not-needed
> +
> +This is a difference between upstream qemu v7.2.1
> +and upstream qemu v7.2.2.
> + 
> + VERSION                              |  2 +-
> + block/vhdx-log.c                     |  2 +-
> + hw/arm/boot.c                        |  5 ++++-
> + hw/net/vmxnet3.c                     |  2 +-
> + hw/nvme/ctrl.c                       |  3 +++
> + hw/rdma/vmw/pvrdma_cmd.c             |  6 ++++++
> + include/qemu/osdep.h                 |  2 +-
> + io/channel-tls.c                     |  3 +++
> + linux-user/fd-trans.c                | 10 ++++++---
> + linux-user/fd-trans.h                |  1 +
> + linux-user/generic/target_resource.h |  4 ++--
> + linux-user/syscall.c                 | 21 ++++++++++++------
> + qga/commands.c                       |  5 ++---
> + qga/installer/qemu-ga.wxs            |  1 +
> + qga/vss-win32/install.cpp            |  2 +-
> + target/arm/cpu.h                     |  3 +++
> + target/s390x/arch_dump.c             |  2 +-
> + target/s390x/cpu.h                   |  1 +
> + target/s390x/s390x-internal.h        |  3 ++-
> + target/s390x/tcg/insn-data.h.inc     |  4 ++--
> + target/s390x/tcg/mem_helper.c        |  1 +
> + target/s390x/tcg/translate.c         | 41 ++++++++++++++++++++++++++++--------
> + ui/gtk.c                             |  4 +++-
> + util/fdmon-epoll.c                   | 25 ++++++++++++++++------
> + 24 files changed, 112 insertions(+), 41 deletions(-)
> +
> +diff --git a/VERSION b/VERSION
> +index b26a34e470..77f5bec5b2 100644
> +--- a/VERSION
> ++++ b/VERSION
> +@@ -1 +1 @@
> +-7.2.1
> ++7.2.2
> +diff --git a/block/vhdx-log.c b/block/vhdx-log.c
> +index 572582b87b..0866897a85 100644
> +--- a/block/vhdx-log.c
> ++++ b/block/vhdx-log.c
> +@@ -980,7 +980,7 @@ static int vhdx_log_write(BlockDriverState *bs, BDRVVHDXState *s,
> +             sector_write = merged_sector;
> +         } else if (i == sectors - 1 && trailing_length) {
> +             /* partial sector at the end of the buffer */
> +-            ret = bdrv_pread(bs->file, file_offset,
> ++            ret = bdrv_pread(bs->file, file_offset + trailing_length,
> +                              VHDX_LOG_SECTOR_SIZE - trailing_length,
> +                              merged_sector + trailing_length, 0);
> +             if (ret < 0) {
> +diff --git a/hw/arm/boot.c b/hw/arm/boot.c
> +index 15c2bf1867..725bab8adc 100644
> +--- a/hw/arm/boot.c
> ++++ b/hw/arm/boot.c
> +@@ -686,7 +686,10 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo,
> +     qemu_register_reset_nosnapshotload(qemu_fdt_randomize_seeds,
> +                                        rom_ptr_for_as(as, addr, size));
> + 
> +-    g_free(fdt);
> ++    if (fdt != ms->fdt) {
> ++        g_free(ms->fdt);
> ++        ms->fdt = fdt;
> ++    }
> + 
> +     return size;
> + 
> +diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
> +index d2ab527ef4..56559cda24 100644
> +--- a/hw/net/vmxnet3.c
> ++++ b/hw/net/vmxnet3.c
> +@@ -1441,7 +1441,7 @@ static void vmxnet3_activate_device(VMXNET3State *s)
> +     vmxnet3_setup_rx_filtering(s);
> +     /* Cache fields from shared memory */
> +     s->mtu = VMXNET3_READ_DRV_SHARED32(d, s->drv_shmem, devRead.misc.mtu);
> +-    assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu < VMXNET3_MAX_MTU);
> ++    assert(VMXNET3_MIN_MTU <= s->mtu && s->mtu <= VMXNET3_MAX_MTU);
> +     VMW_CFPRN("MTU is %u", s->mtu);
> + 
> +     s->max_rx_frags =
> +diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
> +index 1d3e058452..749a6938dd 100644
> +--- a/hw/nvme/ctrl.c
> ++++ b/hw/nvme/ctrl.c
> +@@ -2491,6 +2491,9 @@ static uint16_t nvme_dsm(NvmeCtrl *n, NvmeRequest *req)
> +         status = nvme_h2c(n, (uint8_t *)iocb->range, sizeof(NvmeDsmRange) * nr,
> +                           req);
> +         if (status) {
> ++            g_free(iocb->range);
> ++            qemu_aio_unref(iocb);
> ++
> +             return status;
> +         }
> + 
> +diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c
> +index da7ddfa548..89db963c46 100644
> +--- a/hw/rdma/vmw/pvrdma_cmd.c
> ++++ b/hw/rdma/vmw/pvrdma_cmd.c
> +@@ -796,6 +796,12 @@ int pvrdma_exec_cmd(PVRDMADev *dev)
> + 
> +     dsr_info = &dev->dsr_info;
> + 
> ++    if (!dsr_info->dsr) {
> ++            /* Buggy or malicious guest driver */
> ++            rdma_error_report("Exec command without dsr, req or rsp buffers");
> ++            goto out;
> ++    }
> ++
> +     if (dsr_info->req->hdr.cmd >= sizeof(cmd_handlers) /
> +                       sizeof(struct cmd_handler)) {
> +         rdma_error_report("Unsupported command");
> +diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> +index b9c4307779..3d6cb431ad 100644
> +--- a/include/qemu/osdep.h
> ++++ b/include/qemu/osdep.h
> +@@ -177,7 +177,7 @@ extern "C" {
> +  * supports QEMU_ERROR, this will be reported at compile time; otherwise
> +  * this will be reported at link time due to the missing symbol.
> +  */
> +-extern G_NORETURN
> ++G_NORETURN extern
> + void QEMU_ERROR("code path is reachable")
> +     qemu_build_not_reached_always(void);
> + #if defined(__OPTIMIZE__) && !defined(__NO_INLINE__)
> +diff --git a/io/channel-tls.c b/io/channel-tls.c
> +index 4ce890a538..4ce08ccc28 100644
> +--- a/io/channel-tls.c
> ++++ b/io/channel-tls.c
> +@@ -74,6 +74,9 @@ qio_channel_tls_new_server(QIOChannel *master,
> +     ioc = QIO_CHANNEL_TLS(object_new(TYPE_QIO_CHANNEL_TLS));
> + 
> +     ioc->master = master;
> ++    if (qio_channel_has_feature(master, QIO_CHANNEL_FEATURE_SHUTDOWN)) {
> ++        qio_channel_set_feature(QIO_CHANNEL(ioc), QIO_CHANNEL_FEATURE_SHUTDOWN);
> ++    }
> +     object_ref(OBJECT(master));
> + 
> +     ioc->session = qcrypto_tls_session_new(
> +diff --git a/linux-user/fd-trans.c b/linux-user/fd-trans.c
> +index 7b25468d02..146aaaafaa 100644
> +--- a/linux-user/fd-trans.c
> ++++ b/linux-user/fd-trans.c
> +@@ -1622,7 +1622,7 @@ TargetFdTrans target_signalfd_trans = {
> +     .host_to_target_data = host_to_target_data_signalfd,
> + };
> + 
> +-static abi_long swap_data_eventfd(void *buf, size_t len)
> ++static abi_long swap_data_u64(void *buf, size_t len)
> + {
> +     uint64_t *counter = buf;
> +     int i;
> +@@ -1640,8 +1640,12 @@ static abi_long swap_data_eventfd(void *buf, size_t len)
> + }
> + 
> + TargetFdTrans target_eventfd_trans = {
> +-    .host_to_target_data = swap_data_eventfd,
> +-    .target_to_host_data = swap_data_eventfd,
> ++    .host_to_target_data = swap_data_u64,
> ++    .target_to_host_data = swap_data_u64,
> ++};
> ++
> ++TargetFdTrans target_timerfd_trans = {
> ++    .host_to_target_data = swap_data_u64,
> + };
> + 
> + #if defined(CONFIG_INOTIFY) && (defined(TARGET_NR_inotify_init) || \
> +diff --git a/linux-user/fd-trans.h b/linux-user/fd-trans.h
> +index 1b9fa2041c..910faaf237 100644
> +--- a/linux-user/fd-trans.h
> ++++ b/linux-user/fd-trans.h
> +@@ -130,6 +130,7 @@ extern TargetFdTrans target_netlink_route_trans;
> + extern TargetFdTrans target_netlink_audit_trans;
> + extern TargetFdTrans target_signalfd_trans;
> + extern TargetFdTrans target_eventfd_trans;
> ++extern TargetFdTrans target_timerfd_trans;
> + #if (defined(TARGET_NR_inotify_init) && defined(__NR_inotify_init)) || \
> +     (defined(CONFIG_INOTIFY1) && defined(TARGET_NR_inotify_init1) && \
> +      defined(__NR_inotify_init1))
> +diff --git a/linux-user/generic/target_resource.h b/linux-user/generic/target_resource.h
> +index 539d8c4677..37d3eb09b3 100644
> +--- a/linux-user/generic/target_resource.h
> ++++ b/linux-user/generic/target_resource.h
> +@@ -12,8 +12,8 @@ struct target_rlimit {
> + };
> + 
> + struct target_rlimit64 {
> +-    uint64_t rlim_cur;
> +-    uint64_t rlim_max;
> ++    abi_ullong rlim_cur;
> ++    abi_ullong rlim_max;
> + };
> + 
> + #define TARGET_RLIM_INFINITY    ((abi_ulong)-1)
> +diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> +index 24b25759be..9ca30149d4 100644
> +--- a/linux-user/syscall.c
> ++++ b/linux-user/syscall.c
> +@@ -1755,6 +1755,11 @@ static inline abi_long target_to_host_sockaddr(int fd, struct sockaddr *addr,
> + 	lladdr = (struct target_sockaddr_ll *)addr;
> + 	lladdr->sll_ifindex = tswap32(lladdr->sll_ifindex);
> + 	lladdr->sll_hatype = tswap16(lladdr->sll_hatype);
> ++    } else if (sa_family == AF_INET6) {
> ++        struct sockaddr_in6 *in6addr;
> ++
> ++        in6addr = (struct sockaddr_in6 *)addr;
> ++        in6addr->sin6_scope_id = tswap32(in6addr->sin6_scope_id);
> +     }
> +     unlock_user(target_saddr, target_addr, 0);
> + 
> +@@ -12883,8 +12888,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> +             if (!lock_user_struct(VERIFY_READ, target_rnew, arg3, 1)) {
> +                 return -TARGET_EFAULT;
> +             }
> +-            rnew.rlim_cur = tswap64(target_rnew->rlim_cur);
> +-            rnew.rlim_max = tswap64(target_rnew->rlim_max);
> ++            __get_user(rnew.rlim_cur, &target_rnew->rlim_cur);
> ++            __get_user(rnew.rlim_max, &target_rnew->rlim_max);
> +             unlock_user_struct(target_rnew, arg3, 0);
> +             rnewp = &rnew;
> +         }
> +@@ -12894,8 +12899,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> +             if (!lock_user_struct(VERIFY_WRITE, target_rold, arg4, 1)) {
> +                 return -TARGET_EFAULT;
> +             }
> +-            target_rold->rlim_cur = tswap64(rold.rlim_cur);
> +-            target_rold->rlim_max = tswap64(rold.rlim_max);
> ++            __put_user(rold.rlim_cur, &target_rold->rlim_cur);
> ++            __put_user(rold.rlim_max, &target_rold->rlim_max);
> +             unlock_user_struct(target_rold, arg4, 1);
> +         }
> +         return ret;
> +@@ -13115,8 +13120,12 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
> + 
> + #if defined(TARGET_NR_timerfd_create) && defined(CONFIG_TIMERFD)
> +     case TARGET_NR_timerfd_create:
> +-        return get_errno(timerfd_create(arg1,
> +-                          target_to_host_bitmask(arg2, fcntl_flags_tbl)));
> ++        ret = get_errno(timerfd_create(arg1,
> ++                        target_to_host_bitmask(arg2, fcntl_flags_tbl)));
> ++        if (ret >= 0) {
> ++            fd_trans_register(ret, &target_timerfd_trans);
> ++        }
> ++        return ret;
> + #endif
> + 
> + #if defined(TARGET_NR_timerfd_gettime) && defined(CONFIG_TIMERFD)
> +diff --git a/qga/commands.c b/qga/commands.c
> +index 7ff551d092..6cf978322e 100644
> +--- a/qga/commands.c
> ++++ b/qga/commands.c
> +@@ -32,9 +32,8 @@
> + #define GUEST_FILE_READ_COUNT_MAX (48 * MiB)
> + 
> + /* Note: in some situations, like with the fsfreeze, logging may be
> +- * temporarilly disabled. if it is necessary that a command be able
> +- * to log for accounting purposes, check ga_logging_enabled() beforehand,
> +- * and use the QERR_QGA_LOGGING_DISABLED to generate an error
> ++ * temporarily disabled. if it is necessary that a command be able
> ++ * to log for accounting purposes, check ga_logging_enabled() beforehand.
> +  */
> + void slog(const gchar *fmt, ...)
> + {
> +diff --git a/qga/installer/qemu-ga.wxs b/qga/installer/qemu-ga.wxs
> +index 813d1c6ca6..3442383627 100644
> +--- a/qga/installer/qemu-ga.wxs
> ++++ b/qga/installer/qemu-ga.wxs
> +@@ -31,6 +31,7 @@
> +       />
> +     <Media Id="1" Cabinet="qemu_ga.$(var.QEMU_GA_VERSION).cab" EmbedCab="yes" />
> +     <Property Id="WHSLogo">1</Property>
> ++    <Property Id="ARPNOMODIFY" Value="yes" Secure="yes" />
> +     <MajorUpgrade
> +       DowngradeErrorMessage="Error: A newer version of QEMU guest agent is already installed."
> +       />
> +diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
> +index b57508fbe0..b8087e5baa 100644
> +--- a/qga/vss-win32/install.cpp
> ++++ b/qga/vss-win32/install.cpp
> +@@ -518,7 +518,7 @@ namespace _com_util
> + /* Stop QGA VSS provider service using Winsvc API  */
> + STDAPI StopService(void)
> + {
> +-    HRESULT hr;
> ++    HRESULT hr = S_OK;
> +     SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
> +     SC_HANDLE service = NULL;
> + 
> +diff --git a/target/arm/cpu.h b/target/arm/cpu.h
> +index 9aeed3c848..a9cd7178f8 100644
> +--- a/target/arm/cpu.h
> ++++ b/target/arm/cpu.h
> +@@ -2407,6 +2407,9 @@ static inline bool arm_is_el3_or_mon(CPUARMState *env)
> + /* Return true if the processor is in secure state */
> + static inline bool arm_is_secure(CPUARMState *env)
> + {
> ++    if (arm_feature(env, ARM_FEATURE_M)) {
> ++        return env->v7m.secure;
> ++    }
> +     if (arm_is_el3_or_mon(env)) {
> +         return true;
> +     }
> +diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
> +index a2329141e8..a7c44ba49d 100644
> +--- a/target/s390x/arch_dump.c
> ++++ b/target/s390x/arch_dump.c
> +@@ -248,7 +248,7 @@ static int s390x_write_elf64_notes(const char *note_name,
> +             notep = g_malloc(note_size);
> +         }
> + 
> +-        memset(notep, 0, sizeof(note));
> ++        memset(notep, 0, note_size);
> + 
> +         /* Setup note header data */
> +         notep->hdr.n_descsz = cpu_to_be32(content_size);
> +diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> +index 7d6d01325b..8aaf8dd5a3 100644
> +--- a/target/s390x/cpu.h
> ++++ b/target/s390x/cpu.h
> +@@ -87,6 +87,7 @@ struct CPUArchState {
> +     uint64_t cc_vr;
> + 
> +     uint64_t ex_value;
> ++    uint64_t ex_target;
> + 
> +     uint64_t __excp_addr;
> +     uint64_t psa;
> +diff --git a/target/s390x/s390x-internal.h b/target/s390x/s390x-internal.h
> +index 5d4361d35b..825252d728 100644
> +--- a/target/s390x/s390x-internal.h
> ++++ b/target/s390x/s390x-internal.h
> +@@ -11,6 +11,7 @@
> + #define S390X_INTERNAL_H
> + 
> + #include "cpu.h"
> ++#include "fpu/softfloat.h"
> + 
> + #ifndef CONFIG_USER_ONLY
> + typedef struct LowCore {
> +@@ -299,7 +300,7 @@ uint32_t set_cc_nz_f128(float128 v);
> + uint8_t s390_softfloat_exc_to_ieee(unsigned int exc);
> + int s390_swap_bfp_rounding_mode(CPUS390XState *env, int m3);
> + void s390_restore_bfp_rounding_mode(CPUS390XState *env, int old_mode);
> +-int float_comp_to_cc(CPUS390XState *env, int float_compare);
> ++int float_comp_to_cc(CPUS390XState *env, FloatRelation float_compare);
> + 
> + #define DCMASK_ZERO             0x0c00
> + #define DCMASK_NORMAL           0x0300
> +diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
> +index 54d4250c9f..2a5fc99818 100644
> +--- a/target/s390x/tcg/insn-data.h.inc
> ++++ b/target/s390x/tcg/insn-data.h.inc
> +@@ -199,8 +199,8 @@
> +     C(0xe55c, CHSI,    SIL,   GIE, m1_32s, i2, 0, 0, 0, cmps64)
> +     C(0xe558, CGHSI,   SIL,   GIE, m1_64, i2, 0, 0, 0, cmps64)
> + /* COMPARE HALFWORD RELATIVE LONG */
> +-    C(0xc605, CHRL,    RIL_b, GIE, r1_o, mri2_32s, 0, 0, 0, cmps32)
> +-    C(0xc604, CGHRL,   RIL_b, GIE, r1_o, mri2_64, 0, 0, 0, cmps64)
> ++    C(0xc605, CHRL,    RIL_b, GIE, r1_o, mri2_16s, 0, 0, 0, cmps32)
> ++    C(0xc604, CGHRL,   RIL_b, GIE, r1_o, mri2_16s, 0, 0, 0, cmps64)
> + /* COMPARE HIGH */
> +     C(0xb9cd, CHHR,    RRE,   HW,  r1_sr32, r2_sr32, 0, 0, 0, cmps32)
> +     C(0xb9dd, CHLR,    RRE,   HW,  r1_sr32, r2_o, 0, 0, 0, cmps32)
> +diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c
> +index 3758b9e688..7e7de5e2f1 100644
> +--- a/target/s390x/tcg/mem_helper.c
> ++++ b/target/s390x/tcg/mem_helper.c
> +@@ -2618,6 +2618,7 @@ void HELPER(ex)(CPUS390XState *env, uint32_t ilen, uint64_t r1, uint64_t addr)
> +        that ex_value is non-zero, which flags that we are in a state
> +        that requires such execution.  */
> +     env->ex_value = insn | ilen;
> ++    env->ex_target = addr;
> + }
> + 
> + uint32_t HELPER(mvcos)(CPUS390XState *env, uint64_t dest, uint64_t src,
> +diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
> +index 1e599ac259..e328aa5b97 100644
> +--- a/target/s390x/tcg/translate.c
> ++++ b/target/s390x/tcg/translate.c
> +@@ -5962,9 +5962,25 @@ static void in2_a2(DisasContext *s, DisasOps *o)
> + }
> + #define SPEC_in2_a2 0
> + 
> ++static TCGv gen_ri2(DisasContext *s)
> ++{
> ++    int64_t delta = (int64_t)get_field(s, i2) * 2;
> ++    TCGv ri2;
> ++
> ++    if (unlikely(s->ex_value)) {
> ++        ri2 = tcg_temp_new_i64();
> ++        tcg_gen_ld_i64(ri2, cpu_env, offsetof(CPUS390XState, ex_target));
> ++        tcg_gen_addi_i64(ri2, ri2, delta);
> ++    } else {
> ++        ri2 = tcg_constant_i64(s->base.pc_next + delta);
> ++    }
> ++
> ++    return ri2;
> ++}
> ++
> + static void in2_ri2(DisasContext *s, DisasOps *o)
> + {
> +-    o->in2 = tcg_const_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2);
> ++    o->in2 = gen_ri2(s);
> + }
> + #define SPEC_in2_ri2 0
> + 
> +@@ -6050,31 +6066,38 @@ static void in2_m2_64a(DisasContext *s, DisasOps *o)
> + #define SPEC_in2_m2_64a 0
> + #endif
> + 
> ++static void in2_mri2_16s(DisasContext *s, DisasOps *o)
> ++{
> ++    o->in2 = tcg_temp_new_i64();
> ++    tcg_gen_qemu_ld16s(o->in2, gen_ri2(s), get_mem_index(s));
> ++}
> ++#define SPEC_in2_mri2_16s 0
> ++
> + static void in2_mri2_16u(DisasContext *s, DisasOps *o)
> + {
> +-    in2_ri2(s, o);
> +-    tcg_gen_qemu_ld16u(o->in2, o->in2, get_mem_index(s));
> ++    o->in2 = tcg_temp_new_i64();
> ++    tcg_gen_qemu_ld16u(o->in2, gen_ri2(s), get_mem_index(s));
> + }
> + #define SPEC_in2_mri2_16u 0
> + 
> + static void in2_mri2_32s(DisasContext *s, DisasOps *o)
> + {
> +-    in2_ri2(s, o);
> +-    tcg_gen_qemu_ld32s(o->in2, o->in2, get_mem_index(s));
> ++    o->in2 = tcg_temp_new_i64();
> ++    tcg_gen_qemu_ld32s(o->in2, gen_ri2(s), get_mem_index(s));
> + }
> + #define SPEC_in2_mri2_32s 0
> + 
> + static void in2_mri2_32u(DisasContext *s, DisasOps *o)
> + {
> +-    in2_ri2(s, o);
> +-    tcg_gen_qemu_ld32u(o->in2, o->in2, get_mem_index(s));
> ++    o->in2 = tcg_temp_new_i64();
> ++    tcg_gen_qemu_ld32u(o->in2, gen_ri2(s), get_mem_index(s));
> + }
> + #define SPEC_in2_mri2_32u 0
> + 
> + static void in2_mri2_64(DisasContext *s, DisasOps *o)
> + {
> +-    in2_ri2(s, o);
> +-    tcg_gen_qemu_ld64(o->in2, o->in2, get_mem_index(s));
> ++    o->in2 = tcg_temp_new_i64();
> ++    tcg_gen_qemu_ld64(o->in2, gen_ri2(s), get_mem_index(s));
> + }
> + #define SPEC_in2_mri2_64 0
> + 
> +diff --git a/ui/gtk.c b/ui/gtk.c
> +index 4817623c8f..dfaf6d33c3 100644
> +--- a/ui/gtk.c
> ++++ b/ui/gtk.c
> +@@ -1783,7 +1783,9 @@ static void gd_vc_chr_accept_input(Chardev *chr)
> +     VCChardev *vcd = VC_CHARDEV(chr);
> +     VirtualConsole *vc = vcd->console;
> + 
> +-    gd_vc_send_chars(vc);
> ++    if (vc) {
> ++        gd_vc_send_chars(vc);
> ++    }
> + }
> + 
> + static void gd_vc_chr_set_echo(Chardev *chr, bool echo)
> +diff --git a/util/fdmon-epoll.c b/util/fdmon-epoll.c
> +index e11a8a022e..1683aa1105 100644
> +--- a/util/fdmon-epoll.c
> ++++ b/util/fdmon-epoll.c
> +@@ -127,6 +127,8 @@ static bool fdmon_epoll_try_enable(AioContext *ctx)
> + 
> + bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd)
> + {
> ++    bool ok;
> ++
> +     if (ctx->epollfd < 0) {
> +         return false;
> +     }
> +@@ -136,14 +138,23 @@ bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd)
> +         return false;
> +     }
> + 
> +-    if (npfd >= EPOLL_ENABLE_THRESHOLD) {
> +-        if (fdmon_epoll_try_enable(ctx)) {
> +-            return true;
> +-        } else {
> +-            fdmon_epoll_disable(ctx);
> +-        }
> ++    if (npfd < EPOLL_ENABLE_THRESHOLD) {
> ++        return false;
> ++    }
> ++
> ++    /* The list must not change while we add fds to epoll */
> ++    if (!qemu_lockcnt_dec_if_lock(&ctx->list_lock)) {
> ++        return false;
> ++    }
> ++
> ++    ok = fdmon_epoll_try_enable(ctx);
> ++
> ++    qemu_lockcnt_inc_and_unlock(&ctx->list_lock);
> ++
> ++    if (!ok) {
> ++        fdmon_epoll_disable(ctx);
> +     }
> +-    return false;
> ++    return ok;
> + }
> + 
> + void fdmon_epoll_setup(AioContext *ctx)
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/qemu.desktop qemu-7.2+dfsg-6/debian/qemu.desktop
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/qemu.desktop	2023-04-29 12:05:13.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/qemu.desktop	1970-01-01 03:00:00.000000000 +0300
> @@ -1,8 +0,0 @@
> -# Just for the icon under wayland.
> -# qemu-system-foo sets application name to qemu
> -[Desktop Entry]
> -Name=qemu
> -Comment=QEMU System Emulation
> -Icon=qemu
> -Type=Application
> -NoDisplay=true
> diff -upr --new-file qemu-7.2+dfsg-6-no-v7.2.2/debian/rules qemu-7.2+dfsg-6/debian/rules
> --- qemu-7.2+dfsg-6-no-v7.2.2/debian/rules	2023-04-29 12:05:13.000000000 +0300
> +++ qemu-7.2+dfsg-6/debian/rules	2023-03-05 20:03:09.000000000 +0300
> @@ -477,7 +477,7 @@ sysdata-components += skiboot
>  build-vof: b/vof/vof.bin
>  b/vof/vof.bin: | b
>  	mkdir -p b/vof
> -	printf 'CC=$${CROSS}gcc\nLD=$${CROSS}ld\nOBJCOPY=$${CROSS}objcopy\nEXTRA_CFLAGS=-m32 -mbig-endian' > b/vof/config.mak
> +	echo 'CC=$${CROSS}gcc\nLD=$${CROSS}ld\nOBJCOPY=$${CROSS}objcopy\nEXTRA_CFLAGS=-m32 -mbig-endian' > b/vof/config.mak
>  	${MAKE} -C b/vof CROSS=${PPC64_CROSSPFX} SRC_DIR=../../pc-bios/vof -f../../pc-bios/vof/Makefile
>  install-vof: b/vof/vof.bin
>  	install -m 0644 -t ${sysdataidir} $<
> @@ -614,11 +614,8 @@ build-indep: $(addprefix build-, ${sysda
>  
>  override_dh_auto_install-indep: $(addprefix install-, ${sysdata-components})
>  # qemu-system-data
> -# icon for gtk ui
>  	install -Dp -m0644 ui/icons/qemu.svg \
>  	 -t debian/qemu-system-data/usr/share/icons/hicolor/scalable/apps/
> -	install -Dp -m0644 debian/qemu.desktop \
> -	  -t debian/qemu-system-data/usr/share/applications/
>  # icon for sdl2 ui (non-sdl-image version)
>  	install -Dp -m0644 ui/icons/qemu_32x32.png \
>  	 -t debian/qemu-system-data/usr/share/icons/hicolor/32x32/apps/

-- 
Sebastian Ramacher


Reply to: