2015-11-16 18:42:34

by Brian Norris

[permalink] [raw]
Subject: [PATCH] mtd: fsl-quadspi: possible NULL reference

It is theoretically possible to probe this driver without a matching
device tree, so let's guard against this.

Also, use the of_device_get_match_data() helper to make this a bit
simpler.

Coverity complained about this one.

Signed-off-by: Brian Norris <[email protected]>
Cc: Han Xu <[email protected]>
---
drivers/mtd/spi-nor/fsl-quadspi.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index cc3a70b9b020..68fe7a2ecd5c 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -933,8 +933,6 @@ static int fsl_qspi_probe(struct platform_device *pdev)
struct spi_nor *nor;
struct mtd_info *mtd;
int ret, i = 0;
- const struct of_device_id *of_id =
- of_match_device(fsl_qspi_dt_ids, &pdev->dev);

q = devm_kzalloc(dev, sizeof(*q), GFP_KERNEL);
if (!q)
@@ -945,7 +943,9 @@ static int fsl_qspi_probe(struct platform_device *pdev)
return -ENODEV;

q->dev = dev;
- q->devtype_data = (struct fsl_qspi_devtype_data *)of_id->data;
+ q->devtype_data = of_device_get_match_data(dev);
+ if (!q->devtype_data)
+ return -ENODEV;
platform_set_drvdata(pdev, q);

/* find the resources */
--
2.6.0.rc2.230.g3dd15c0


2015-11-16 18:45:43

by Brian Norris

[permalink] [raw]
Subject: [PATCH v2] mtd: fsl-quadspi: possible NULL dereference

It is theoretically possible to probe this driver without a matching
device tree, so let's guard against this.

Also, use the of_device_get_match_data() helper to make this a bit
simpler.

Coverity complained about this one.

Signed-off-by: Brian Norris <[email protected]>
Cc: Han Xu <[email protected]>
---
v2:
* missed a 'const' warning
* s/reference/dereference in $subject

drivers/mtd/spi-nor/fsl-quadspi.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
index cc3a70b9b020..916d6dd5b575 100644
--- a/drivers/mtd/spi-nor/fsl-quadspi.c
+++ b/drivers/mtd/spi-nor/fsl-quadspi.c
@@ -269,7 +269,7 @@ struct fsl_qspi {
struct clk *clk, *clk_en;
struct device *dev;
struct completion c;
- struct fsl_qspi_devtype_data *devtype_data;
+ const struct fsl_qspi_devtype_data *devtype_data;
u32 nor_size;
u32 nor_num;
u32 clk_rate;
@@ -933,8 +933,6 @@ static int fsl_qspi_probe(struct platform_device *pdev)
struct spi_nor *nor;
struct mtd_info *mtd;
int ret, i = 0;
- const struct of_device_id *of_id =
- of_match_device(fsl_qspi_dt_ids, &pdev->dev);

q = devm_kzalloc(dev, sizeof(*q), GFP_KERNEL);
if (!q)
@@ -945,7 +943,9 @@ static int fsl_qspi_probe(struct platform_device *pdev)
return -ENODEV;

q->dev = dev;
- q->devtype_data = (struct fsl_qspi_devtype_data *)of_id->data;
+ q->devtype_data = of_device_get_match_data(dev);
+ if (!q->devtype_data)
+ return -ENODEV;
platform_set_drvdata(pdev, q);

/* find the resources */
--
2.6.0.rc2.230.g3dd15c0

2015-11-16 19:47:24

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] mtd: fsl-quadspi: possible NULL reference

Hi Brian,

[auto build test WARNING on mtd/master]
[also build test WARNING on v4.4-rc1 next-20151116]

url: https://github.com/0day-ci/linux/commits/Brian-Norris/mtd-fsl-quadspi-possible-NULL-reference/20151117-024430
base: git://git.infradead.org/linux-mtd.git master
config: i386-allmodconfig (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All warnings (new ones prefixed by >>):

drivers/mtd/spi-nor/fsl-quadspi.c: In function 'fsl_qspi_probe':
>> drivers/mtd/spi-nor/fsl-quadspi.c:947:18: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
q->devtype_data = of_device_get_match_data(dev);
^

vim +/const +947 drivers/mtd/spi-nor/fsl-quadspi.c

931 struct device *dev = &pdev->dev;
932 struct fsl_qspi *q;
933 struct resource *res;
934 struct spi_nor *nor;
935 struct mtd_info *mtd;
936 int ret, i = 0;
937
938 q = devm_kzalloc(dev, sizeof(*q), GFP_KERNEL);
939 if (!q)
940 return -ENOMEM;
941
942 q->nor_num = of_get_child_count(dev->of_node);
943 if (!q->nor_num || q->nor_num > FSL_QSPI_MAX_CHIP)
944 return -ENODEV;
945
946 q->dev = dev;
> 947 q->devtype_data = of_device_get_match_data(dev);
948 if (!q->devtype_data)
949 return -ENODEV;
950 platform_set_drvdata(pdev, q);
951
952 /* find the resources */
953 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "QuadSPI");
954 q->iobase = devm_ioremap_resource(dev, res);
955 if (IS_ERR(q->iobase))

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (1.73 kB)
.config.gz (50.31 kB)
Download all attachments

2015-11-17 21:54:33

by Han Xu

[permalink] [raw]
Subject: Re: [PATCH v2] mtd: fsl-quadspi: possible NULL dereference

On Mon, Nov 16, 2015 at 10:45:30AM -0800, Brian Norris wrote:
> It is theoretically possible to probe this driver without a matching
> device tree, so let's guard against this.
>
> Also, use the of_device_get_match_data() helper to make this a bit
> simpler.
>
> Coverity complained about this one.
>
> Signed-off-by: Brian Norris <[email protected]>
> Cc: Han Xu <[email protected]>
> ---
> v2:
> * missed a 'const' warning
> * s/reference/dereference in $subject
>
> drivers/mtd/spi-nor/fsl-quadspi.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c
> index cc3a70b9b020..916d6dd5b575 100644
> --- a/drivers/mtd/spi-nor/fsl-quadspi.c
> +++ b/drivers/mtd/spi-nor/fsl-quadspi.c
> @@ -269,7 +269,7 @@ struct fsl_qspi {
> struct clk *clk, *clk_en;
> struct device *dev;
> struct completion c;
> - struct fsl_qspi_devtype_data *devtype_data;
> + const struct fsl_qspi_devtype_data *devtype_data;
> u32 nor_size;
> u32 nor_num;
> u32 clk_rate;
> @@ -933,8 +933,6 @@ static int fsl_qspi_probe(struct platform_device *pdev)
> struct spi_nor *nor;
> struct mtd_info *mtd;
> int ret, i = 0;
> - const struct of_device_id *of_id =
> - of_match_device(fsl_qspi_dt_ids, &pdev->dev);
>
> q = devm_kzalloc(dev, sizeof(*q), GFP_KERNEL);
> if (!q)
> @@ -945,7 +943,9 @@ static int fsl_qspi_probe(struct platform_device *pdev)
> return -ENODEV;
>
> q->dev = dev;
> - q->devtype_data = (struct fsl_qspi_devtype_data *)of_id->data;
> + q->devtype_data = of_device_get_match_data(dev);
> + if (!q->devtype_data)
> + return -ENODEV;
> platform_set_drvdata(pdev, q);
>
> /* find the resources */
> --
> 2.6.0.rc2.230.g3dd15c0
>
Acked-by: Han xu <[email protected]>
--
Best Regards,

Han "Allen" Xu

2015-11-18 18:33:06

by Brian Norris

[permalink] [raw]
Subject: Re: [PATCH v2] mtd: fsl-quadspi: possible NULL dereference

On Mon, Nov 16, 2015 at 10:45:30AM -0800, Brian Norris wrote:
> It is theoretically possible to probe this driver without a matching
> device tree, so let's guard against this.
>
> Also, use the of_device_get_match_data() helper to make this a bit
> simpler.
>
> Coverity complained about this one.
>
> Signed-off-by: Brian Norris <[email protected]>
> Cc: Han Xu <[email protected]>
> ---
> v2:
> * missed a 'const' warning
> * s/reference/dereference in $subject

Pushed to l2-mtd.git