[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20231129084247.32443-1-liuhaoran14@163.com>
Date: Wed, 29 Nov 2023 00:42:47 -0800
From: Haoran Liu <liuhaoran14@....com>
To: rafael@...nel.org
Cc: lenb@...nel.org, linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org, Haoran Liu <liuhaoran14@....com>
Subject: [PATCH] [ACPI] sbshc: Add error handling for acpi_driver_data
This patch enhances the acpi_smbus_hc_add and acpi_smbus_hc_remove
functions in drivers/acpi/sbshc.c by adding error handling for the
acpi_driver_data calls. Previously, these functions did not check
the return value of acpi_driver_data, potentially leading to
stability issues if the function failed and returned a null pointer.
Signed-off-by: Haoran Liu <liuhaoran14@....com>
---
drivers/acpi/sbshc.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/acpi/sbshc.c b/drivers/acpi/sbshc.c
index 16f2daaa2c45..1394104d3894 100644
--- a/drivers/acpi/sbshc.c
+++ b/drivers/acpi/sbshc.c
@@ -267,6 +267,12 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
init_waitqueue_head(&hc->wait);
hc->ec = acpi_driver_data(acpi_dev_parent(device));
+ if (!hc->ec) {
+ pr_err("Failed to retrieve parent ACPI device data\n");
+ kfree(hc);
+ return -ENODEV;
+ }
+
hc->offset = (val >> 8) & 0xff;
hc->query_bit = val & 0xff;
device->driver_data = hc;
@@ -288,6 +294,11 @@ static void acpi_smbus_hc_remove(struct acpi_device *device)
return;
hc = acpi_driver_data(device);
+ if (!hc) {
+ pr_err("Failed to retrieve ACPI SMBus HC data\n");
+ return;
+ }
+
acpi_ec_remove_query_handler(hc->ec, hc->query_bit);
acpi_os_wait_events_complete();
kfree(hc);
--
2.17.1
Powered by blists - more mailing lists