- bnc#803712 - after live migration rcu_sched_state detected stalls xen.migrate.tools-xend_move_assert_to_exception_block.patch xen.migrate.tools-libxc_print_stats_if_migration_is_aborted.patch xen.migrate.tools_set_number_of_dirty_pages_during_migration.patch xen.migrate.tools_notify_restore_to_hangup_during_migration_--abort_if_busy.patch - bnc#811764 - XEN (hypervisor or kernel) has a problem with EFI variable services x86-EFI-set-variable-permit-attrs.patch - Upstream patches from Jan 26060-ACPI-ERST-table-size-checks.patch 26692-x86-fully-protect-MSI-X-table-from-PV-guest-accesses.patch 26702-powernow-add-fixups-for-AMD-P-state-figures.patch 26704-x86-MCA-suppress-bank-clearing-for-certain-injected-events.patch (bnc#805579) 26731-AMD-IOMMU-Process-softirqs-while-building-dom0-iommu-mappings.patch 26733-VT-d-Enumerate-IOMMUs-when-listing-capabilities.patch 26734-ACPI-ERST-Name-table-in-otherwise-opaque-error-messages.patch 26736-ACPI-APEI-Unlock-apei_iomaps_lock-on-error-path.patch 26737-ACPI-APEI-Add-apei_exec_run_optional.patch 26742-IOMMU-properly-check-whether-interrupt-remapping-is-enabled.patch 26743-VT-d-deal-with-5500-5520-X58-errata.patch (bnc#801910) 26744-AMD-IOMMU-allow-disabling-only-interrupt-remapping.patch - PVonHVM: __devinit was removed in linux-3.8 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=234
68 lines
2.0 KiB
Diff
68 lines
2.0 KiB
Diff
References: bnc#785211
|
|
|
|
# HG changeset patch
|
|
# User Huang Ying <ying.huang@intel.com>
|
|
# Date 1350401196 -7200
|
|
# Node ID 4fc87c2f31a02c770655518c9e4d389302564f00
|
|
# Parent c1c549c4fe9ebdc460cbf51e296edad157b6e518
|
|
ACPI: fix APEI related table size checking
|
|
|
|
On Huang Ying's machine:
|
|
|
|
erst_tab->header_length == sizeof(struct acpi_table_einj)
|
|
|
|
but Yinghai reported that on his machine,
|
|
|
|
erst_tab->header_length == sizeof(struct acpi_table_einj) -
|
|
sizeof(struct acpi_table_header)
|
|
|
|
To make erst table size checking code works on all systems, both
|
|
testing are treated as PASS.
|
|
|
|
Same situation applies to einj_tab->header_length, so corresponding
|
|
table size checking is changed in similar way too.
|
|
|
|
Originally-by: Yinghai Lu <yinghai@kernel.org>
|
|
Signed-off-by: Huang Ying <ying.huang@intel.com>
|
|
|
|
- use switch() for better readability
|
|
- add comment explaining why a formally invalid size it also being
|
|
accepted
|
|
- check erst_tab->header.length before even looking at
|
|
erst_tab->header_length
|
|
- prefer sizeof(*erst_tab) over sizeof(struct acpi_table_erst)
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
Acked-by: Keir Fraser <keir@xen.org>
|
|
Committed-by: Jan Beulich <jbeulich@suse.com>
|
|
|
|
--- a/xen/drivers/acpi/apei/erst.c
|
|
+++ b/xen/drivers/acpi/apei/erst.c
|
|
@@ -715,12 +715,23 @@ int erst_clear(u64 record_id)
|
|
|
|
static int __init erst_check_table(struct acpi_table_erst *erst_tab)
|
|
{
|
|
- if (erst_tab->header_length != sizeof(struct acpi_table_erst))
|
|
+ if (erst_tab->header.length < sizeof(*erst_tab))
|
|
return -EINVAL;
|
|
- if (erst_tab->header.length < sizeof(struct acpi_table_erst))
|
|
+
|
|
+ switch (erst_tab->header_length) {
|
|
+ case sizeof(*erst_tab) - sizeof(erst_tab->header):
|
|
+ /*
|
|
+ * While invalid per specification, there are (early?) systems
|
|
+ * indicating the full header size here, so accept that value too.
|
|
+ */
|
|
+ case sizeof(*erst_tab):
|
|
+ break;
|
|
+ default:
|
|
return -EINVAL;
|
|
+ }
|
|
+
|
|
if (erst_tab->entries !=
|
|
- (erst_tab->header.length - sizeof(struct acpi_table_erst)) /
|
|
+ (erst_tab->header.length - sizeof(*erst_tab)) /
|
|
sizeof(struct acpi_erst_entry))
|
|
return -EINVAL;
|
|
|