From: "Rafael J. Wysocki" <[email protected]>

Every platform driver can be forced to match a device that doesn't match
its list of device IDs because of device_match_driver_override(), so
platform drivers that rely on the existence of a device's ACPI companion
object need to verify its presence.

Accordingly, add a requisite ACPI_COMPANION() check against NULL to the
tpm_crb driver.

Fixes: 48fe2cddc85c ("tpm_crb: Convert ACPI driver to a platform one")
Signed-off-by: Rafael J. Wysocki <[email protected]>
---
 drivers/char/tpm/tpm_crb.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/drivers/char/tpm/tpm_crb.c
+++ b/drivers/char/tpm/tpm_crb.c
@@ -786,8 +786,8 @@ static int crb_map_pluton(struct device
 static int crb_acpi_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
-       struct acpi_device *device = ACPI_COMPANION(dev);
        struct acpi_table_tpm2 *buf;
+       struct acpi_device *device;
        struct crb_priv *priv;
        struct tpm_chip *chip;
        struct tpm2_crb_smc *crb_smc;
@@ -797,6 +797,10 @@ static int crb_acpi_probe(struct platfor
        u32 sm;
        int rc;
 
+       device = ACPI_COMPANION(dev);
+       if (!device)
+               return -ENODEV;
+
        status = acpi_get_table(ACPI_SIG_TPM2, 1,
                                (struct acpi_table_header **) &buf);
        if (ACPI_FAILURE(status) || buf->header.length < sizeof(*buf)) {




Reply via email to