ACPI: EC: Abort address space access upon error
authorArmin Wolf <W_Armin@gmx.de>
Wed, 22 May 2024 21:36:48 +0000 (23:36 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 27 May 2024 10:43:29 +0000 (12:43 +0200)
When a multi-byte address space access is requested, acpi_ec_read()/
acpi_ec_write() is being called multiple times.

Abort such operations if a single call to acpi_ec_read() /
acpi_ec_write() fails, as the data read from / written to the EC
might be incomplete.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/ec.c

index e7793ee9e6498ea5edb671ef7c6f38ba470c9a44..a68dce2147a4dbc37db9d904361c32a665eac579 100644 (file)
@@ -1333,10 +1333,13 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
        if (ec->busy_polling || bits > 8)
                acpi_ec_burst_enable(ec);
 
-       for (i = 0; i < bytes; ++i, ++address, ++value)
+       for (i = 0; i < bytes; ++i, ++address, ++value) {
                result = (function == ACPI_READ) ?
                        acpi_ec_read(ec, address, value) :
                        acpi_ec_write(ec, address, *value);
+               if (result < 0)
+                       break;
+       }
 
        if (ec->busy_polling || bits > 8)
                acpi_ec_burst_disable(ec);