ACPICA: Fix parameter validation for acpi_read/write
Now return AE_BAD_PARAMETER if the input register pointer is null, and AE_BAD_ADDRESS if the register has an address of zero. Previously, these cases simply returned AE_OK. For optional registers such as PM1B status/enable/control, the caller should check for a valid register address before calling. ACPICA BZ 748. http://www.acpica.org/bugzilla/show_bug.cgi?id=748 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
aefc7f9a02
commit
ac0c845026
|
@ -107,19 +107,18 @@ acpi_status acpi_read(u32 *value, struct acpi_generic_address *reg)
|
|||
ACPI_FUNCTION_NAME(acpi_read);
|
||||
|
||||
/*
|
||||
* Must have a valid pointer to a GAS structure, and
|
||||
* a non-zero address within. However, don't return an error
|
||||
* because the PM1A/B code must not fail if B isn't present.
|
||||
* Must have a valid pointer to a GAS structure, and a non-zero address
|
||||
* within.
|
||||
*/
|
||||
if (!reg) {
|
||||
return (AE_OK);
|
||||
return (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/* Get a local copy of the address. Handles possible alignment issues */
|
||||
|
||||
ACPI_MOVE_64_TO_64(&address, ®->address);
|
||||
if (!address) {
|
||||
return (AE_OK);
|
||||
return (AE_BAD_ADDRESS);
|
||||
}
|
||||
|
||||
/* Supported widths are 8/16/32 */
|
||||
|
@ -187,19 +186,18 @@ acpi_status acpi_write(u32 value, struct acpi_generic_address *reg)
|
|||
ACPI_FUNCTION_NAME(acpi_write);
|
||||
|
||||
/*
|
||||
* Must have a valid pointer to a GAS structure, and
|
||||
* a non-zero address within. However, don't return an error
|
||||
* because the PM1A/B code must not fail if B isn't present.
|
||||
* Must have a valid pointer to a GAS structure, and a non-zero address
|
||||
* within.
|
||||
*/
|
||||
if (!reg) {
|
||||
return (AE_OK);
|
||||
return (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/* Get a local copy of the address. Handles possible alignment issues */
|
||||
|
||||
ACPI_MOVE_64_TO_64(&address, ®->address);
|
||||
if (!address) {
|
||||
return (AE_OK);
|
||||
return (AE_BAD_ADDRESS);
|
||||
}
|
||||
|
||||
/* Supported widths are 8/16/32 */
|
||||
|
|
|
@ -103,8 +103,9 @@
|
|||
#define AE_BAD_OCTAL_CONSTANT (acpi_status) (0x0006 | AE_CODE_PROGRAMMER)
|
||||
#define AE_BAD_DECIMAL_CONSTANT (acpi_status) (0x0007 | AE_CODE_PROGRAMMER)
|
||||
#define AE_MISSING_ARGUMENTS (acpi_status) (0x0008 | AE_CODE_PROGRAMMER)
|
||||
#define AE_BAD_ADDRESS (acpi_status) (0x0009 | AE_CODE_PROGRAMMER)
|
||||
|
||||
#define AE_CODE_PGM_MAX 0x0008
|
||||
#define AE_CODE_PGM_MAX 0x0009
|
||||
|
||||
/*
|
||||
* Acpi table exceptions
|
||||
|
@ -224,7 +225,8 @@ char const *acpi_gbl_exception_names_pgm[] = {
|
|||
"AE_BAD_HEX_CONSTANT",
|
||||
"AE_BAD_OCTAL_CONSTANT",
|
||||
"AE_BAD_DECIMAL_CONSTANT",
|
||||
"AE_MISSING_ARGUMENTS"
|
||||
"AE_MISSING_ARGUMENTS",
|
||||
"AE_BAD_ADDRESS"
|
||||
};
|
||||
|
||||
char const *acpi_gbl_exception_names_tbl[] = {
|
||||
|
|
Loading…
Reference in a new issue