diff options
author | Wen Yang <yellowriver2010@hotmail.com> | 2019-02-07 14:01:32 +0000 |
---|---|---|
committer | Miquel Raynal <miquel.raynal@bootlin.com> | 2019-02-07 23:14:16 +0100 |
commit | 0119720a00b20074a51245427f05366ede2fa90a (patch) | |
tree | 14b809969fdf99942e76aa39d37bc86cf55cab9a /drivers/mtd/nand | |
parent | 11493f26856a6098de6fe2d93e9eefebca3e31d6 (diff) | |
download | linux-0119720a00b20074a51245427f05366ede2fa90a.tar.bz2 |
mtd: rawnand: mtk: fix possible object reference leak
of_find_device_by_node() takes a reference to the struct device
when it finds a match via get_device, there is no need to call
get_device() twice.
We also should make sure to drop the reference to the device
taken by of_find_device_by_node() on driver unbind.
Fixes: 1d6b1e464950 ("mtd: mediatek: driver for MTK Smart Device")
Signed-off-by: Wen Yang <yellowriver2010@hotmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Diffstat (limited to 'drivers/mtd/nand')
-rw-r--r-- | drivers/mtd/nand/raw/mtk_ecc.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/mtd/nand/raw/mtk_ecc.c b/drivers/mtd/nand/raw/mtk_ecc.c index 6432bd70c3b3..05b0c19d72d9 100644 --- a/drivers/mtd/nand/raw/mtk_ecc.c +++ b/drivers/mtd/nand/raw/mtk_ecc.c @@ -267,11 +267,15 @@ static struct mtk_ecc *mtk_ecc_get(struct device_node *np) struct mtk_ecc *ecc; pdev = of_find_device_by_node(np); - if (!pdev || !platform_get_drvdata(pdev)) + if (!pdev) return ERR_PTR(-EPROBE_DEFER); - get_device(&pdev->dev); ecc = platform_get_drvdata(pdev); + if (!ecc) { + put_device(&pdev->dev); + return ERR_PTR(-EPROBE_DEFER); + } + clk_prepare_enable(ecc->clk); mtk_ecc_hw_init(ecc); |