From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Date: Wed, 11 Sep 2019 10:49:28 +0000 Subject: [PATCH v3] drm: panel-lvds: Potential Oops in probe error handling Message-Id: <20190911104928.GA15930@mwanda> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Thierry Reding , Laurent Pinchart Cc: David Airlie , kernel-janitors@vger.kernel.org, Liam Girdwood , dri-devel@lists.freedesktop.org, Mark Brown , Sam Ravnborg The "lvds->backlight" pointer could be NULL in situations where of_parse_phandle() returns NULL. This code is cleaner if we use the managed devm_of_find_backlight() so the clean up is automatic. Fixes: 7c9dff5bd643 ("drm: panels: Add LVDS panel driver") Signed-off-by: Dan Carpenter --- v3: Use devm_of_find_backlight(). This version is quite a bit more ambitious, and I haven't tested it so please review carefully. v2: Use backlight_put() drivers/gpu/drm/panel/panel-lvds.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-lvds.c b/drivers/gpu/drm/panel/panel-lvds.c index ad47cc95459e..bf5fcc3e5379 100644 --- a/drivers/gpu/drm/panel/panel-lvds.c +++ b/drivers/gpu/drm/panel/panel-lvds.c @@ -197,7 +197,6 @@ static int panel_lvds_parse_dt(struct panel_lvds *lvds) static int panel_lvds_probe(struct platform_device *pdev) { struct panel_lvds *lvds; - struct device_node *np; int ret; lvds = devm_kzalloc(&pdev->dev, sizeof(*lvds), GFP_KERNEL); @@ -243,14 +242,9 @@ static int panel_lvds_probe(struct platform_device *pdev) return ret; } - np = of_parse_phandle(lvds->dev->of_node, "backlight", 0); - if (np) { - lvds->backlight = of_find_backlight_by_node(np); - of_node_put(np); - - if (!lvds->backlight) - return -EPROBE_DEFER; - } + lvds->backlight = devm_of_find_backlight(lvds->dev); + if (IS_ERR(lvds->backlight)) + return PTR_ERR(lvds->backlight); /* * TODO: Handle all power supplies specified in the DT node in a generic @@ -266,14 +260,10 @@ static int panel_lvds_probe(struct platform_device *pdev) ret = drm_panel_add(&lvds->panel); if (ret < 0) - goto error; + return ret; dev_set_drvdata(lvds->dev, lvds); return 0; - -error: - put_device(&lvds->backlight->dev); - return ret; } static int panel_lvds_remove(struct platform_device *pdev) @@ -284,9 +274,6 @@ static int panel_lvds_remove(struct platform_device *pdev) panel_lvds_disable(&lvds->panel); - if (lvds->backlight) - put_device(&lvds->backlight->dev); - return 0; } -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Subject: [PATCH v3] drm: panel-lvds: Potential Oops in probe error handling Date: Wed, 11 Sep 2019 13:49:28 +0300 Message-ID: <20190911104928.GA15930@mwanda> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by gabe.freedesktop.org (Postfix) with ESMTPS id 518036EA7D for ; Wed, 11 Sep 2019 10:49:57 +0000 (UTC) Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding , Laurent Pinchart Cc: David Airlie , kernel-janitors@vger.kernel.org, Liam Girdwood , dri-devel@lists.freedesktop.org, Mark Brown , Sam Ravnborg List-Id: dri-devel@lists.freedesktop.org VGhlICJsdmRzLT5iYWNrbGlnaHQiIHBvaW50ZXIgY291bGQgYmUgTlVMTCBpbiBzaXR1YXRpb25z IHdoZXJlCm9mX3BhcnNlX3BoYW5kbGUoKSByZXR1cm5zIE5VTEwuICBUaGlzIGNvZGUgaXMgY2xl YW5lciBpZiB3ZSB1c2UgdGhlCm1hbmFnZWQgZGV2bV9vZl9maW5kX2JhY2tsaWdodCgpIHNvIHRo ZSBjbGVhbiB1cCBpcyBhdXRvbWF0aWMuCgpGaXhlczogN2M5ZGZmNWJkNjQzICgiZHJtOiBwYW5l bHM6IEFkZCBMVkRTIHBhbmVsIGRyaXZlciIpClNpZ25lZC1vZmYtYnk6IERhbiBDYXJwZW50ZXIg PGRhbi5jYXJwZW50ZXJAb3JhY2xlLmNvbT4KLS0tCnYzOiBVc2UgZGV2bV9vZl9maW5kX2JhY2ts aWdodCgpLiAgVGhpcyB2ZXJzaW9uIGlzIHF1aXRlIGEgYml0IG1vcmUKICAgIGFtYml0aW91cywg YW5kIEkgaGF2ZW4ndCB0ZXN0ZWQgaXQgc28gcGxlYXNlIHJldmlldyBjYXJlZnVsbHkuCnYyOiBV c2UgYmFja2xpZ2h0X3B1dCgpCgogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWx2ZHMuYyB8 IDIxICsrKystLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygr KSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLWx2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1sdmRzLmMKaW5kZXggYWQ0 N2NjOTU0NTllLi5iZjVmY2MzZTUzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC1sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWx2ZHMuYwpA QCAtMTk3LDcgKzE5Nyw2IEBAIHN0YXRpYyBpbnQgcGFuZWxfbHZkc19wYXJzZV9kdChzdHJ1Y3Qg cGFuZWxfbHZkcyAqbHZkcykKIHN0YXRpYyBpbnQgcGFuZWxfbHZkc19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBwYW5lbF9sdmRzICpsdmRzOwotCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnA7CiAJaW50IHJldDsKIAogCWx2ZHMgPSBkZXZtX2t6YWxsb2MoJnBk ZXYtPmRldiwgc2l6ZW9mKCpsdmRzKSwgR0ZQX0tFUk5FTCk7CkBAIC0yNDMsMTQgKzI0Miw5IEBA IHN0YXRpYyBpbnQgcGFuZWxfbHZkc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogCQlyZXR1cm4gcmV0OwogCX0KIAotCW5wID0gb2ZfcGFyc2VfcGhhbmRsZShsdmRzLT5kZXYt Pm9mX25vZGUsICJiYWNrbGlnaHQiLCAwKTsKLQlpZiAobnApIHsKLQkJbHZkcy0+YmFja2xpZ2h0 ID0gb2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZShucCk7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQot CQlpZiAoIWx2ZHMtPmJhY2tsaWdodCkKLQkJCXJldHVybiAtRVBST0JFX0RFRkVSOwotCX0KKwls dmRzLT5iYWNrbGlnaHQgPSBkZXZtX29mX2ZpbmRfYmFja2xpZ2h0KGx2ZHMtPmRldik7CisJaWYg KElTX0VSUihsdmRzLT5iYWNrbGlnaHQpKQorCQlyZXR1cm4gUFRSX0VSUihsdmRzLT5iYWNrbGln aHQpOwogCiAJLyoKIAkgKiBUT0RPOiBIYW5kbGUgYWxsIHBvd2VyIHN1cHBsaWVzIHNwZWNpZmll ZCBpbiB0aGUgRFQgbm9kZSBpbiBhIGdlbmVyaWMKQEAgLTI2NiwxNCArMjYwLDEwIEBAIHN0YXRp YyBpbnQgcGFuZWxfbHZkc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCiAJ cmV0ID0gZHJtX3BhbmVsX2FkZCgmbHZkcy0+cGFuZWwpOwogCWlmIChyZXQgPCAwKQotCQlnb3Rv IGVycm9yOworCQlyZXR1cm4gcmV0OwogCiAJZGV2X3NldF9kcnZkYXRhKGx2ZHMtPmRldiwgbHZk cyk7CiAJcmV0dXJuIDA7Ci0KLWVycm9yOgotCXB1dF9kZXZpY2UoJmx2ZHMtPmJhY2tsaWdodC0+ ZGV2KTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBhbmVsX2x2ZHNfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yODQsOSArMjc0LDYgQEAgc3RhdGljIGlu dCBwYW5lbF9sdmRzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCiAJcGFu ZWxfbHZkc19kaXNhYmxlKCZsdmRzLT5wYW5lbCk7CiAKLQlpZiAobHZkcy0+YmFja2xpZ2h0KQot CQlwdXRfZGV2aWNlKCZsdmRzLT5iYWNrbGlnaHQtPmRldik7Ci0KIAlyZXR1cm4gMDsKIH0KIAot LSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=