coresight: etm3x: Smatch: Fix potential NULL pointer dereference
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Fri, 21 Jun 2019 17:52:04 +0000 (11:52 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jul 2019 19:16:36 +0000 (21:16 +0200)
Based on the following report from  Smatch tool, make sure we have a
valid drvdata before we dereference it to find the real dev.

The patch 21d26b905c05: "coresight: etm: Clean up device specific
data" from May 22, 2019, leads to the following Smatch complaint:

    ./drivers/hwtracing/coresight/coresight-etm3x.c:460 etm_get_trace_id()
    warn: variable dereferenced before check 'drvdata' (see line 458)

./drivers/hwtracing/coresight/coresight-etm3x.c
   457 int trace_id = -1;
   458 struct device *etm_dev = drvdata->csdev->dev.parent;
                                         ^^^^^^^^^
New dereference

   459
   460 if (!drvdata)
                    ^^^^^^^^
Checked too late.  Delete the check?

   461 goto out;
   462

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20190621175205.24551-2-mathieu.poirier@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hwtracing/coresight/coresight-etm3x.c

index bed7291..225c298 100644 (file)
@@ -455,11 +455,12 @@ int etm_get_trace_id(struct etm_drvdata *drvdata)
 {
        unsigned long flags;
        int trace_id = -1;
-       struct device *etm_dev = drvdata->csdev->dev.parent;
+       struct device *etm_dev;
 
        if (!drvdata)
                goto out;
 
+       etm_dev = drvdata->csdev->dev.parent;
        if (!local_read(&drvdata->mode))
                return drvdata->traceid;