Accepting request 586666 from home:lin_ma:branches:Virtualization
correctly handle smbios table files for fixing bsc994082 and bsc1084316 OBS-URL: https://build.opensuse.org/request/show/586666 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=399
This commit is contained in:
parent
531647e446
commit
bc7401062b
192
0077-smbios-Add-1-terminator-if-any-stri.patch
Normal file
192
0077-smbios-Add-1-terminator-if-any-stri.patch
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
From f49122e7d4af62fa2cb8ab1a7ae8aff67a62a475 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lin Ma <lma@suse.com>
|
||||||
|
Date: Wed, 14 Mar 2018 14:31:26 +0800
|
||||||
|
Subject: [PATCH] smbios: Add 1 terminator if any string fields defined in
|
||||||
|
given table.
|
||||||
|
|
||||||
|
If user specifies smbios table files through qemu command line, Then will
|
||||||
|
get error messages while decoding those table content in guest.
|
||||||
|
|
||||||
|
Reproducer:
|
||||||
|
1. dump a smbios table(say table 1) to a binary file from a pc.
|
||||||
|
2. load the binary file through command line: 'qemu -smbios file=...'.
|
||||||
|
3. perform 'dmidecode' or 'dmidecode -t 1' in guest.
|
||||||
|
|
||||||
|
It reports 'Invalid entry length...' because qemu doesn't add terminator(s)
|
||||||
|
correctly for the table.
|
||||||
|
|
||||||
|
This patch fixed the issue by:
|
||||||
|
|
||||||
|
For smbios tables which have string fields provided, qemu should add 1 terminator.
|
||||||
|
For smbios tables which dont have string fields provided, qemu should add 2.
|
||||||
|
|
||||||
|
[LM: BSC#994082]
|
||||||
|
[LM: BSC#1084316]
|
||||||
|
Signed-off-by: Lin Ma <lma@suse.com>
|
||||||
|
---
|
||||||
|
hw/smbios/smbios.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
include/hw/smbios/smbios.h | 44 +++++++++++++++++++++++
|
||||||
|
2 files changed, 134 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
|
||||||
|
index 5d11f01874..d9f5f1ef70 100644
|
||||||
|
--- a/hw/smbios/smbios.c
|
||||||
|
+++ b/hw/smbios/smbios.c
|
||||||
|
@@ -954,6 +954,9 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||||
|
{
|
||||||
|
const char *val;
|
||||||
|
|
||||||
|
+ int i, terminator_count = 2, table_str_field_count = 0;
|
||||||
|
+ int *tables_str_field_offset = NULL;
|
||||||
|
+
|
||||||
|
assert(!smbios_immutable);
|
||||||
|
|
||||||
|
val = qemu_opt_get(opts, "file");
|
||||||
|
@@ -995,7 +998,94 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
|
||||||
|
smbios_type4_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ switch (header->type) {
|
||||||
|
+ case 0:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_0_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){\
|
||||||
|
+ TYPE_0_STR_FIELD_OFFSET_VENDOR, \
|
||||||
|
+ TYPE_0_STR_FIELD_OFFSET_BIOS_VERSION, \
|
||||||
|
+ TYPE_0_STR_FIELD_OFFSET_BIOS_RELEASE_DATE};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ case 1:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_1_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_MANUFACTURER, \
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_PRODUCT, \
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_VERSION, \
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_SERIAL, \
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_SKU, \
|
||||||
|
+ TYPE_1_STR_FIELD_OFFSET_FAMILY};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ case 2:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_2_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){\
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_MANUFACTURER, \
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_PRODUCT, \
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_VERSION, \
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_SERIAL, \
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_ASSET, \
|
||||||
|
+ TYPE_2_STR_FIELD_OFFSET_LOCATION};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ case 3:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_3_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){\
|
||||||
|
+ TYPE_3_STR_FIELD_OFFSET_MANUFACTURER, \
|
||||||
|
+ TYPE_3_STR_FIELD_OFFSET_VERSION, \
|
||||||
|
+ TYPE_3_STR_FIELD_OFFSET_SERIAL, \
|
||||||
|
+ TYPE_3_STR_FIELD_OFFSET_ASSET, \
|
||||||
|
+ TYPE_3_STR_FIELD_OFFSET_SKU};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ case 4:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_4_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){\
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_SOCKET, \
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_PROCESSOR_MANUFACTURER, \
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_PROCESSOR_VERSION, \
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_SERIAL, \
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_ASSET, \
|
||||||
|
+ TYPE_4_STR_FIELD_OFFSET_PART};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ case 17:
|
||||||
|
+ tables_str_field_offset = g_malloc0(sizeof(int) * \
|
||||||
|
+ TYPE_17_STR_FIELD_COUNT);
|
||||||
|
+ tables_str_field_offset = (int []){\
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_DEVICE_LOCATOR, \
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_BANK_LOCATOR, \
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_MANUFACTURER, \
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_SERIAL, \
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_ASSET, \
|
||||||
|
+ TYPE_17_STR_FIELD_OFFSET_PART};
|
||||||
|
+ table_str_field_count = sizeof(tables_str_field_offset) / \
|
||||||
|
+ sizeof(tables_str_field_offset[0]);
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < table_str_field_count; i++) {
|
||||||
|
+ if (*(uint8_t *)(smbios_tables + tables_str_field_offset[i]) > 0) {
|
||||||
|
+ terminator_count = 1;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
smbios_tables_len += size;
|
||||||
|
+ smbios_tables_len += terminator_count;
|
||||||
|
if (size > smbios_table_max) {
|
||||||
|
smbios_table_max = size;
|
||||||
|
}
|
||||||
|
diff --git a/include/hw/smbios/smbios.h b/include/hw/smbios/smbios.h
|
||||||
|
index a83adb93d7..6613f68ad1 100644
|
||||||
|
--- a/include/hw/smbios/smbios.h
|
||||||
|
+++ b/include/hw/smbios/smbios.h
|
||||||
|
@@ -273,4 +273,48 @@ void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
|
||||||
|
const unsigned int mem_array_size,
|
||||||
|
uint8_t **tables, size_t *tables_len,
|
||||||
|
uint8_t **anchor, size_t *anchor_len);
|
||||||
|
+
|
||||||
|
+#define TYPE_0_STR_FIELD_OFFSET_VENDOR 0x4
|
||||||
|
+#define TYPE_0_STR_FIELD_OFFSET_BIOS_VERSION 0x5
|
||||||
|
+#define TYPE_0_STR_FIELD_OFFSET_BIOS_RELEASE_DATE 0x8
|
||||||
|
+#define TYPE_0_STR_FIELD_COUNT 3
|
||||||
|
+
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_MANUFACTURER 0x4
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_PRODUCT 0x5
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_VERSION 0x6
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_SERIAL 0x7
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_SKU 0x19
|
||||||
|
+#define TYPE_1_STR_FIELD_OFFSET_FAMILY 0x1a
|
||||||
|
+#define TYPE_1_STR_FIELD_COUNT 6
|
||||||
|
+
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_MANUFACTURER 0x4
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_PRODUCT 0x5
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_VERSION 0x6
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_SERIAL 0x7
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_ASSET 0x8
|
||||||
|
+#define TYPE_2_STR_FIELD_OFFSET_LOCATION 0xa
|
||||||
|
+#define TYPE_2_STR_FIELD_COUNT 6
|
||||||
|
+
|
||||||
|
+#define TYPE_3_STR_FIELD_OFFSET_MANUFACTURER 0x4
|
||||||
|
+#define TYPE_3_STR_FIELD_OFFSET_VERSION 0x6
|
||||||
|
+#define TYPE_3_STR_FIELD_OFFSET_SERIAL 0x7
|
||||||
|
+#define TYPE_3_STR_FIELD_OFFSET_ASSET 0x8
|
||||||
|
+#define TYPE_3_STR_FIELD_OFFSET_SKU 0x14
|
||||||
|
+#define TYPE_3_STR_FIELD_COUNT 5
|
||||||
|
+
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_SOCKET 0x4
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_PROCESSOR_MANUFACTURER 0x7
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_PROCESSOR_VERSION 0x10
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_SERIAL 0x20
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_ASSET 0x21
|
||||||
|
+#define TYPE_4_STR_FIELD_OFFSET_PART 0x22
|
||||||
|
+#define TYPE_4_STR_FIELD_COUNT 6
|
||||||
|
+
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_DEVICE_LOCATOR 0x10
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_BANK_LOCATOR 0x11
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_MANUFACTURER 0x17
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_SERIAL 0x18
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_ASSET 0x19
|
||||||
|
+#define TYPE_17_STR_FIELD_OFFSET_PART 0x1a
|
||||||
|
+#define TYPE_17_STR_FIELD_COUNT 6
|
||||||
|
#endif /* QEMU_SMBIOS_H */
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 14 06:38:40 UTC 2018 - lma@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.11
|
||||||
|
* Patches added:
|
||||||
|
0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
|
bsc#994082 and bsc#1084316
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 9 20:52:00 UTC 2018 - brogers@suse.com
|
Fri Mar 9 20:52:00 UTC 2018 - brogers@suse.com
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
Name: qemu-linux-user
|
Name: qemu-linux-user
|
||||||
Url: http://www.qemu.org/
|
Url: http://www.qemu.org/
|
||||||
Summary: CPU emulator for user space
|
Summary: CPU emulator for user space
|
||||||
License: BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT
|
License: BSD-3-Clause AND GPL-2.0 AND GPL-2.0+ AND LGPL-2.1+ AND MIT
|
||||||
Group: System/Emulators/PC
|
Group: System/Emulators/PC
|
||||||
Version: 2.11.1
|
Version: 2.11.1
|
||||||
Release: 0
|
Release: 0
|
||||||
@ -102,6 +102,7 @@ Patch0073: 0073-sev-i386-add-migration-blocker.patch
|
|||||||
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
||||||
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
||||||
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
||||||
|
Patch0077: 0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
# Please do not add QEMU patches manually here.
|
# Please do not add QEMU patches manually here.
|
||||||
# Run update_git.sh to regenerate this queue.
|
# Run update_git.sh to regenerate this queue.
|
||||||
Source400: update_git.sh
|
Source400: update_git.sh
|
||||||
@ -207,6 +208,7 @@ syscall layer occurs on the native hardware and operating system.
|
|||||||
%patch0074 -p1
|
%patch0074 -p1
|
||||||
%patch0075 -p1
|
%patch0075 -p1
|
||||||
%patch0076 -p1
|
%patch0076 -p1
|
||||||
|
%patch0077 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
./configure \
|
./configure \
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 14 06:38:36 UTC 2018 - lma@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.11
|
||||||
|
* Patches added:
|
||||||
|
0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
|
bsc#994082 and bsc#1084316
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 9 20:51:57 UTC 2018 - brogers@suse.com
|
Fri Mar 9 20:51:57 UTC 2018 - brogers@suse.com
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@
|
|||||||
Name: qemu-testsuite
|
Name: qemu-testsuite
|
||||||
Url: http://www.qemu.org/
|
Url: http://www.qemu.org/
|
||||||
Summary: Machine emulator and virtualizer
|
Summary: Machine emulator and virtualizer
|
||||||
License: BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT
|
License: BSD-3-Clause AND GPL-2.0 AND GPL-2.0+ AND LGPL-2.1+ AND MIT
|
||||||
Group: System/Emulators/PC
|
Group: System/Emulators/PC
|
||||||
Version: 2.11.1
|
Version: 2.11.1
|
||||||
Release: 0
|
Release: 0
|
||||||
@ -206,6 +206,7 @@ Patch0073: 0073-sev-i386-add-migration-blocker.patch
|
|||||||
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
||||||
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
||||||
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
||||||
|
Patch0077: 0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
# Please do not add QEMU patches manually here.
|
# Please do not add QEMU patches manually here.
|
||||||
# Run update_git.sh to regenerate this queue.
|
# Run update_git.sh to regenerate this queue.
|
||||||
|
|
||||||
@ -881,6 +882,7 @@ This package provides a service file for starting and stopping KSM.
|
|||||||
%patch0074 -p1
|
%patch0074 -p1
|
||||||
%patch0075 -p1
|
%patch0075 -p1
|
||||||
%patch0076 -p1
|
%patch0076 -p1
|
||||||
|
%patch0077 -p1
|
||||||
|
|
||||||
%if 0%{?suse_version} > 1320
|
%if 0%{?suse_version} > 1320
|
||||||
%patch1000 -p1
|
%patch1000 -p1
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 14 06:38:36 UTC 2018 - lma@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.11
|
||||||
|
* Patches added:
|
||||||
|
0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
|
bsc#994082 and bsc#1084316
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 9 20:51:57 UTC 2018 - brogers@suse.com
|
Fri Mar 9 20:51:57 UTC 2018 - brogers@suse.com
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@
|
|||||||
Name: qemu
|
Name: qemu
|
||||||
Url: http://www.qemu.org/
|
Url: http://www.qemu.org/
|
||||||
Summary: Machine emulator and virtualizer
|
Summary: Machine emulator and virtualizer
|
||||||
License: BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT
|
License: BSD-3-Clause AND GPL-2.0 AND GPL-2.0+ AND LGPL-2.1+ AND MIT
|
||||||
Group: System/Emulators/PC
|
Group: System/Emulators/PC
|
||||||
Version: 2.11.1
|
Version: 2.11.1
|
||||||
Release: 0
|
Release: 0
|
||||||
@ -206,6 +206,7 @@ Patch0073: 0073-sev-i386-add-migration-blocker.patch
|
|||||||
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
Patch0074: 0074-cpu-i386-populate-CPUID-0x8000_001F.patch
|
||||||
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
Patch0075: 0075-migration-warn-about-inconsistent-s.patch
|
||||||
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
Patch0076: 0076-smbios-support-setting-OEM-strings-.patch
|
||||||
|
Patch0077: 0077-smbios-Add-1-terminator-if-any-stri.patch
|
||||||
# Please do not add QEMU patches manually here.
|
# Please do not add QEMU patches manually here.
|
||||||
# Run update_git.sh to regenerate this queue.
|
# Run update_git.sh to regenerate this queue.
|
||||||
|
|
||||||
@ -881,6 +882,7 @@ This package provides a service file for starting and stopping KSM.
|
|||||||
%patch0074 -p1
|
%patch0074 -p1
|
||||||
%patch0075 -p1
|
%patch0075 -p1
|
||||||
%patch0076 -p1
|
%patch0076 -p1
|
||||||
|
%patch0077 -p1
|
||||||
|
|
||||||
%if 0%{?suse_version} > 1320
|
%if 0%{?suse_version} > 1320
|
||||||
%patch1000 -p1
|
%patch1000 -p1
|
||||||
|
Loading…
Reference in New Issue
Block a user