7f46c79c5d
- Update to v6.1: see https://wiki.qemu.org/ChangeLog/6.1 For a full list of formely deprecated features that are removed, consult: https://qemu-project.gitlab.io/qemu/about/removed-features.html For a list of new deprecated features, consult: https://qemu-project.gitlab.io/qemu/about/deprecated.html Some noteworthy changes: * Removed moxie CPU. * Removed lm32 CPU. * Removed unicore32 CPU. * Removed 'info cpustats'. * Added Aspeed machines: rainier-bmc, quanta-q7l1-bmc. * Added npcm7xx machine: quanta-gbs-bmc. * Model for Aspeed's Hash and Crypto Engine. * SVE2 is now emulated, including bfloat16 support * FEAT_I8MM, FEAT_TLBIOS, FEAT_TLBRANGE, FEAT_BF16, FEAT_AA32BF16, and FEAT_MTE3 are now emulated. * Improved hot-unplug failures on PowerPC pseries machine. * Implemented some POWER10 instructions in TCG. * Added shakti_c RISC-V machine. * Improved documentation for RISC-V machines. * CPU models for gen16 have been added for s390x. * New CPU model versions added with XSAVES enabled: Skylake-Client-v4, Skylake-Server-v5, Cascadelake-Server-v5, Cooperlake-v2, Icelake-Client-v3, Icelake-Server-v5, Denverton-v3, Snowridge-v3, Dhyana-v2 * Added ACPI based PCI hotplug support to Q35 machine. Enabled and used by default since pc-q35-6.1 machine type. * Added support for the pca9546 and pca9548 I2C muxes. * Added support for PMBus and several PMBus devices. * Crypto subsystem: The preferred crypto backend driver now gnutls, with libgcrypt as the second choice, and nettle as third choice, with ordering driven mostly by performance of the ciphers. * Misc doc improvements. * Patches removed: block-nvme-Fix-VFIO_MAP_DMA-failed-No-sp.patch hmp-Fix-loadvm-to-resume-the-VM-on-succe.patch hw-block-nvme-align-with-existing-style.patch hw-block-nvme-consider-metadata-read-aio.patch hw-net-can-sja1000-fix-buff2frame_bas-an.patch hw-nvme-fix-missing-check-for-PMR-capabi.patch hw-nvme-fix-pin-based-interrupt-behavior.patch hw-pci-host-q35-Ignore-write-of-reserved.patch hw-rdma-Fix-possible-mremap-overflow-in-.patch hw-rx-rx-gdbsim-Do-not-accept-invalid-me.patch hw-usb-Do-not-build-USB-subsystem-if-not.patch hw-usb-host-stub-Remove-unused-header.patch linux-user-aarch64-Enable-hwcap-for-RND-.patch module-for-virtio-gpu-pre-load-module-to.patch monitor-qmp-fix-race-on-CHR_EVENT_CLOSED.patch pvrdma-Ensure-correct-input-on-ring-init.patch pvrdma-Fix-the-ring-init-error-flow-CVE-.patch qemu-config-load-modules-when-instantiat.patch qemu-config-parse-configuration-files-to.patch qemu-config-use-qemu_opts_from_qdict.patch runstate-Initialize-Error-to-NULL.patch sockets-update-SOCKET_ADDRESS_TYPE_FD-li.patch target-i386-Exit-tb-after-wrmsr.patch target-sh4-Return-error-if-CPUClass-get_.patch tcg-Allocate-sufficient-storage-in-temp_.patch tcg-arm-Fix-tcg_out_op-function-signatur.patch tcg-sparc-Fix-temp_allocate_frame-vs-spa.patch ui-Fix-memory-leak-in-qemu_xkeymap_mappi.patch usb-hid-avoid-dynamic-stack-allocation.patch usb-limit-combined-packets-to-1-MiB-CVE-.patch usb-mtp-avoid-dynamic-stack-allocation.patch usb-redir-avoid-dynamic-stack-allocation.patch usbredir-fix-free-call.patch vfio-ccw-Permit-missing-IRQs.patch vhost-user-blk-Check-that-num-queues-is-.patch vhost-user-blk-Don-t-reconnect-during-in.patch vhost-user-blk-Fail-gracefully-on-too-la.patch vhost-user-blk-Get-more-feature-flags-fr.patch vhost-user-blk-Make-sure-to-set-Error-on.patch vhost-user-gpu-abstract-vg_cleanup_mappi.patch vhost-user-gpu-fix-leak-in-virgl_cmd_res.patch vhost-user-gpu-fix-leak-in-virgl_resourc.patch vhost-user-gpu-fix-memory-disclosure-in-.patch vhost-user-gpu-fix-memory-leak-in-vg_res.patch vhost-user-gpu-fix-memory-leak-while-cal.patch vhost-user-gpu-fix-OOB-write-in-virgl_cm.patch vhost-user-gpu-fix-resource-leak-in-vg_r.patch vhost-vdpa-don-t-initialize-backend_feat.patch virtio-blk-Fix-rollback-path-in-virtio_b.patch virtio-Fail-if-iommu_platform-is-request.patch virtiofsd-Fix-side-effect-in-assert.patch vl-allow-not-specifying-size-in-m-when-u.patch vl-Fix-an-assert-failure-in-error-path.patch vl-plug-object-back-into-readconfig.patch vl-plumb-keyval-based-options-into-readc.patch x86-acpi-use-offset-instead-of-pointer-w.patch OBS-URL: https://build.opensuse.org/request/show/914430 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=665
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 7397e567373b2dbfabae8fe10a5f..61b7546a6dd7010bdc248f969100 100644
|
|
--- a/hw/smbios/smbios.c
|
|
+++ b/hw/smbios/smbios.c
|
|
@@ -1138,6 +1138,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;
|
|
@@ -1150,11 +1151,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);
|
|
|
|
@@ -1169,6 +1180,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) {
|
|
@@ -1189,6 +1213,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);
|