diff options
author | Bob Moore <robert.moore@intel.com> | 2008-04-10 11:06:39 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-04-22 14:29:24 -0400 |
commit | 5eb691805f7ec5960fe9d5d7fc57a7fc3097bbd0 (patch) | |
tree | bd968bd9717f55a32ff9a30062aad025854c3bc6 /drivers/acpi/tables | |
parent | 53cf174409a24e8388e1d554d27436275fc81fe7 (diff) |
ACPICA: Fix for fault if Load() fails
Fixed a problem with the Load operator when loading a table from
a buffer object. The input buffer was prematurely zeroed and/or
deleted.
http://www.acpica.org/bugzilla/show_bug.cgi?id=577
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/tables')
-rw-r--r-- | drivers/acpi/tables/tbinstal.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c index 3bc0c67a9283..6a6ee1f06c76 100644 --- a/drivers/acpi/tables/tbinstal.c +++ b/drivers/acpi/tables/tbinstal.c | |||
@@ -125,13 +125,20 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, | |||
125 | 125 | ||
126 | /* The table must be either an SSDT or a PSDT or an OEMx */ | 126 | /* The table must be either an SSDT or a PSDT or an OEMx */ |
127 | 127 | ||
128 | if ((!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_PSDT)) | 128 | if (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_PSDT)&& |
129 | && | 129 | !ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT)&& |
130 | (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT)) | 130 | strncmp(table_desc->pointer->signature, "OEM", 3)) { |
131 | && (strncmp(table_desc->pointer->signature, "OEM", 3))) { | 131 | /* Check for a printable name */ |
132 | ACPI_ERROR((AE_INFO, | 132 | if (acpi_ut_valid_acpi_name( |
133 | "Table has invalid signature [%4.4s], must be SSDT, PSDT or OEMx", | 133 | *(u32 *) table_desc->pointer->signature)) { |
134 | table_desc->pointer->signature)); | 134 | ACPI_ERROR((AE_INFO, "Table has invalid signature " |
135 | "[%4.4s], must be SSDT or PSDT", | ||
136 | table_desc->pointer->signature)); | ||
137 | } else { | ||
138 | ACPI_ERROR((AE_INFO, "Table has invalid signature " | ||
139 | "(0x%8.8X), must be SSDT or PSDT", | ||
140 | *(u32 *) table_desc->pointer->signature)); | ||
141 | } | ||
135 | return_ACPI_STATUS(AE_BAD_SIGNATURE); | 142 | return_ACPI_STATUS(AE_BAD_SIGNATURE); |
136 | } | 143 | } |
137 | 144 | ||