| From 78a18fec5258c8df9435399a1ea022d73d3eceb9 Mon Sep 17 00:00:00 2001 |
| From: Hans de Goede <hdegoede@redhat.com> |
| Date: Fri, 15 Jan 2021 22:57:52 +0100 |
| Subject: ACPI: scan: Make acpi_bus_get_device() clear return pointer on error |
| |
| From: Hans de Goede <hdegoede@redhat.com> |
| |
| commit 78a18fec5258c8df9435399a1ea022d73d3eceb9 upstream. |
| |
| Set the acpi_device pointer which acpi_bus_get_device() returns-by- |
| reference to NULL on errors. |
| |
| We've recently had 2 cases where callers of acpi_bus_get_device() |
| did not properly error check the return value, so set the returned- |
| by-reference acpi_device pointer to NULL, because at least some |
| callers of acpi_bus_get_device() expect that to be done on errors. |
| |
| [ rjw: This issue was exposed by commit 71da201f38df ("ACPI: scan: |
| Defer enumeration of devices with _DEP lists") which caused it to |
| be much more likely to occur on some systems, but the real defect |
| had been introduced by an earlier commit. ] |
| |
| Fixes: 40e7fcb19293 ("ACPI: Add _DEP support to fix battery issue on Asus T100TA") |
| Fixes: bcfcd409d4db ("usb: split code locating ACPI companion into port and device") |
| Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Diagnosed-by: Rafael J. Wysocki <rafael@kernel.org> |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Cc: All applicable <stable@vger.kernel.org> |
| [ rjw: Subject and changelog edits ] |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/acpi/scan.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/acpi/scan.c |
| +++ b/drivers/acpi/scan.c |
| @@ -585,6 +585,8 @@ static int acpi_get_device_data(acpi_han |
| if (!device) |
| return -EINVAL; |
| |
| + *device = NULL; |
| + |
| status = acpi_get_data_full(handle, acpi_scan_drop_device, |
| (void **)device, callback); |
| if (ACPI_FAILURE(status) || !*device) { |