Skip to content

Commit b6328a0

Browse files
committed
ACPI / PNP: Fix acpi_pnp_match()
The acpi_pnp_match() function is used for finding the ACPI device object that should be associated with the given PNP device. Unfortunately, the check used by that function is not strict enough and may cause success to be returned for a wrong ACPI device object. To fix that, use the observation that the pointer to the ACPI device object in question is already stored in the data field in struct pnp_dev, so acpi_pnp_match() can simply use that field to do its job. This problem was uncovered in 3.14 by commit 202317a (ACPI / scan: Add acpi_device objects for all device nodes in the namespace). Fixes: 202317a (ACPI / scan: Add acpi_device objects for all device nodes in the namespace) Reported-and-tested-by: Vinson Lee <[email protected]> Cc: 3.14+ <[email protected]> # 3.14+ Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 64aa90f commit b6328a0

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

drivers/pnp/pnpacpi/core.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,7 @@ static int __init acpi_pnp_match(struct device *dev, void *_pnp)
319319
struct pnp_dev *pnp = _pnp;
320320

321321
/* true means it matched */
322-
return !acpi->physical_node_count
323-
&& compare_pnp_id(pnp->id, acpi_device_hid(acpi));
322+
return pnp->data == acpi;
324323
}
325324

326325
static struct acpi_device * __init acpi_pnp_find_companion(struct device *dev)

0 commit comments

Comments
 (0)