fc6feafd4e
- Update to v5.2.0: See http://wiki.qemu.org/ChangeLog/5.2 Take note that ongoing feature deprecation is tracked at both http://wiki.qemu-project.org/Features/LegacyRemoval and in the deprecated.html file installed with the qemu package Some noteworthy changes: * Dropped system emulators: qemu-system-lm32, qemu-system-unicore32 * Dropped linux user emulator: qemu-ppc64abi32 * Added linux user emulator: qemu-extensaeb * Unicore32 and lm32 guest support dropped * New sub-packages (most due to ongoing modularization of QEMU): qemu-audio-spice, qemu-hw-chardev-spice, qemu-hw-display-virtio-vga, qemu-hw-display-virtio-gpu, qemu-hw-display-virtio-gpu-pci, qemu-ui-spice-core, qemu-ui-opengl, qemu-ivshmem-tools * x86: A new KVM feature which improves the handling of asynchronous page faults is available with -cpu ...,kvm-async-pf-int (requires Linux 5.8) * s390: More instructions emulated under TCG * PowerPC: nvdimm= machine option now functions correctly; misc improvements * ARM: new boards: mps2-an386 (Cortex-M4 based) and mps2-an500 (Cortex-M7 based), raspi3ap (the Pi 3 model A+), raspi0 (the Pi Zero) and raspi1ap (the Pi A+) * RISC-V: OpenSBI v0.8 included by default; Generic OpenSBI platform used when no -bios argument is supplied; Support for NUMA sockets on Virt and Spike Machines; Support for migrating machines; misc improvements * Misc NVMe improvements * The 'vhost-user-blk' export type has been added, allowing qemu-storage-daemon to act as a vhost-user-blk device backend * The SMBIOS OEM strings can now come from a file * 9pfs - misc performance related improvements * virtiofs - misc improvements * migration: The default migration bandwidth has been increased to 1Gbps (users are still encouraged to tune it to their own hardware); The new 'calc-dirty-rate' and 'query-dirty-rate' QMP commands can help determine the likelihood of precopy migration success; TLS+multifd now supported for higher bandwidth encrypted migration; misc minor features added * Misc minor block features added * Misc doc improvements * qemu-microvm subpackage change: the bios-microvm.bin is now SeaBIOS based, and the qboot based on is now qboot.rom * elf2dmp is no longer part of qemu-tools (it was never intended to be a packaged binary) * Some subpackages which were 'Requires' are now 'Recommends', allowing for a smaller qemu packaging footprint if needed * Patches dropped (included in release tarball, unless otherwise noted): docs-fix-trace-docs-build-with-sphinx-3..patch (fixed differently) hw-hyperv-vmbus-Fix-32bit-compilation.patch linux-user-properly-test-for-infinite-ti.patch Switch-order-of-libraries-for-mpath-supp.patch (fixed differently) Conditionalize-ui-bitmap-installation-be.patch (fixed differently) hw-usb-hcd-xhci-Fix-GCC-9-build-warning.patch (no longer using gcc9) hw-usb-dev-mtp-Fix-GCC-9-build-warning.patch (no longer using gcc9) roms-Makefile-enable-cross-compile-for-b.patch (fixed with different patch) libvhost-user-handle-endianness-as-manda.patch virtio-add-vhost-user-fs-ccw-device.patch Fix-s-directive-argument-is-null-error.patch build-Workaround-compilation-error-with-.patch build-Be-explicit-about-fcommon-compiler.patch intel-Avoid-spurious-compiler-warning-on.patch golan-Add-explicit-type-casts-for-nodnic.patch Do-not-apply-WORKAROUND_CFLAGS-for-host-.patch ensure-headers-included-are-compatible-w.patch Enable-cross-compile-prefix-for-C-compil.patch (fixed differently) hw-net-net_tx_pkt-fix-assertion-failure-.patch hw-net-xgmac-Fix-buffer-overflow-in-xgma.patch s390x-protvirt-allow-to-IPL-secure-guest.patch usb-fix-setup_len-init-CVE-2020-14364.patch * Patches added: meson-install-ivshmem-client-and-ivshmem.patch Revert-roms-efirom-tests-uefi-test-tools.patch Makefile-Don-t-check-pc-bios-as-pre-requ.patch roms-Makefile-add-cross-file-to-qboot-me.patch qboot-add-cross.ini-file-to-handle-aarch.patch usb-Help-compiler-out-to-avoid-a-warning.patch - In spec file, where reasonable, switch BuildRequires: XXX-devel to be pkgconfig(XXX') instead - No longer disable link time optimization for qemu for x86. It looks like either the build service, qemu code changes and/or the switch to meson have resolved issues previously seen there. We still see problems for other architectures however. - For the record, the following issues reported for SUSE SLE15-SP2 are either fixed in this current package, or are otherwise no longer an issue: bsc#1172384 bsc#1174386 bsc#1174641 bsc#1174863 bsc#1175370 bsc#1175441 bsc#1176494 CVE-2020-13361 CVE-2020-14364 CVE-2020-15863 CVE-2020-16092 CVE-2020-24352 and the following feature requests are satisfied by this package: jsc#SLE-13689 jsc#SEL-13780 jsc#SLE-13840 - To be more accurate, and to align with other qemu packaging practices, rename the qemu-s390 package to qemu-s390x. The old name (in the rpm namespace) is provided with a "Provides" directive, and an "Obsoletes" done against that name for prior qemu versions, as is standard practice (boo#1177764 jsc#SLE-17060) - Take this opportunity to remove some ancient Split-Provides mechanisms which can't conceivably be needed any more: qemu-block-curl provided: qemu:%_libdir/%name/block-curl.so qemu-guest-agent provided: qemu:%_bindir/qemu-ga qemu-tools provided: qemu:%_libexecdir/qemu-bridge-helper - Disable linux-user 'ls' test on 32 bit arm. It's failing with "Allocating guest commpage: Cannot allocate memory" error, which we should hunt down, but for now we don't want it to prevent the package from being built OBS-URL: https://build.opensuse.org/request/show/854151 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=597
94 lines
4.1 KiB
Diff
94 lines
4.1 KiB
Diff
From: Bruce Rogers <brogers@suse.com>
|
|
Date: Fri, 5 Apr 2019 21:10:30 -0600
|
|
Subject: hw/smbios: handle both file formats regardless of machine type
|
|
|
|
References: bsc#994082, bsc#1084316, boo#1131894
|
|
|
|
It's easy enough to handle either per-spec or legacy smbios structures
|
|
in the smbios file input without regard to the machine type used, by
|
|
simply applying the basic smbios formatting rules. then depending on
|
|
what is detected. terminal numm bytes are added or removed for machine
|
|
type specific processing.
|
|
|
|
Signed-off-by: Bruce Rogers <brogers@suse.com>
|
|
---
|
|
hw/smbios/smbios.c | 43 +++++++++++++++++++++++++++++++++++++++----
|
|
1 file changed, 39 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
|
|
index 6a3d39793bc9dd13f6c6cc8c08e4..e3c9d92c1d60c0f791c5852f88e5 100644
|
|
--- a/hw/smbios/smbios.c
|
|
+++ b/hw/smbios/smbios.c
|
|
@@ -1040,6 +1040,7 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
|
struct smbios_structure_header *header;
|
|
int size;
|
|
struct smbios_table *table; /* legacy mode only */
|
|
+ uint8_t *dbl_nulls, *orig_end;
|
|
|
|
if (!qemu_opts_validate(opts, qemu_smbios_file_opts, errp)) {
|
|
return;
|
|
@@ -1052,11 +1053,21 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
|
}
|
|
|
|
/*
|
|
- * NOTE: standard double '\0' terminator expected, per smbios spec.
|
|
- * (except in legacy mode, where the second '\0' is implicit and
|
|
- * will be inserted by the BIOS).
|
|
+ * NOTE: standard double '\0' terminator expected, per smbios spec,
|
|
+ * unless the data is formatted for legacy mode, which is used by
|
|
+ * pc-i440fx-2.0 and earlier machine types. Legacy mode structures
|
|
+ * without strings have no '\0' terminators, and those with strings
|
|
+ * also don't have an additional '\0' terminator at the end of the
|
|
+ * final string '\0' terminator. The BIOS will add the '\0' terminators
|
|
+ * to comply with the smbios spec.
|
|
+ * For greater compatibility, regardless of the machine type used,
|
|
+ * either format is accepted.
|
|
*/
|
|
- smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size);
|
|
+ smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size + 2);
|
|
+ orig_end = smbios_tables + smbios_tables_len + size;
|
|
+ /* add extra null bytes to end in case of legacy file data */
|
|
+ *orig_end = '\0';
|
|
+ *(orig_end + 1) = '\0';
|
|
header = (struct smbios_structure_header *)(smbios_tables +
|
|
smbios_tables_len);
|
|
|
|
@@ -1071,6 +1082,19 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
|
header->type);
|
|
return;
|
|
}
|
|
+ for (dbl_nulls = smbios_tables + smbios_tables_len + header->length;
|
|
+ dbl_nulls + 2 <= orig_end; dbl_nulls++) {
|
|
+ if (*dbl_nulls == '\0' && *(dbl_nulls + 1) == '\0') {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ if (dbl_nulls + 2 < orig_end) {
|
|
+ error_setg(errp, "SMBIOS file data malformed");
|
|
+ return;
|
|
+ }
|
|
+ /* increase size by how many extra nulls were actually needed */
|
|
+ size += dbl_nulls + 2 - orig_end;
|
|
+ smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size);
|
|
set_bit(header->type, have_binfile_bitmap);
|
|
|
|
if (header->type == 4) {
|
|
@@ -1091,6 +1115,17 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
|
* delete the one we don't need from smbios_set_defaults(),
|
|
* once we know which machine version has been requested.
|
|
*/
|
|
+ if (dbl_nulls + 2 == orig_end) {
|
|
+ /* chop off nulls to get legacy format */
|
|
+ if (header->length + 2 == size) {
|
|
+ size -= 2;
|
|
+ } else {
|
|
+ size -= 1;
|
|
+ }
|
|
+ } else {
|
|
+ /* undo conversion from legacy format to per-spec format */
|
|
+ size -= dbl_nulls + 2 - orig_end;
|
|
+ }
|
|
if (!smbios_entries) {
|
|
smbios_entries_len = sizeof(uint16_t);
|
|
smbios_entries = g_malloc0(smbios_entries_len);
|