Message ID | 20220227135329.145862-4-krzysztof.kozlowski@canonical.com |
---|---|
State | New |
Headers | show |
Series | Fix broken usage of driver_override (and kfree of static memory) | expand |
On 27/02/2022 13:53, Krzysztof Kozlowski wrote: > The driver_override field from platform driver should not be initialized > from static memory (string literal) because the core later kfree() it, > for example when driver_override is set via sysfs. > > Use dedicated helper to set driver_override properly. > > Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") > Cc: <stable@vger.kernel.org> > Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> LGTM, Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > --- > drivers/slimbus/qcom-ngd-ctrl.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c > index 7040293c2ee8..e5d9fdb81eb0 100644 > --- a/drivers/slimbus/qcom-ngd-ctrl.c > +++ b/drivers/slimbus/qcom-ngd-ctrl.c > @@ -1434,6 +1434,7 @@ static int of_qcom_slim_ngd_register(struct device *parent, > const struct of_device_id *match; > struct device_node *node; > u32 id; > + int ret; > > match = of_match_node(qcom_slim_ngd_dt_match, parent->of_node); > data = match->data; > @@ -1455,7 +1456,17 @@ static int of_qcom_slim_ngd_register(struct device *parent, > } > ngd->id = id; > ngd->pdev->dev.parent = parent; > - ngd->pdev->driver_override = QCOM_SLIM_NGD_DRV_NAME; > + > + ret = driver_set_override(&ngd->pdev->dev, > + &ngd->pdev->driver_override, > + QCOM_SLIM_NGD_DRV_NAME, > + strlen(QCOM_SLIM_NGD_DRV_NAME)); > + if (ret) { > + platform_device_put(ngd->pdev); > + kfree(ngd); > + of_node_put(node); > + return ret; > + } > ngd->pdev->dev.of_node = node; > ctrl->ngd = ngd; >
diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c index 7040293c2ee8..e5d9fdb81eb0 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -1434,6 +1434,7 @@ static int of_qcom_slim_ngd_register(struct device *parent, const struct of_device_id *match; struct device_node *node; u32 id; + int ret; match = of_match_node(qcom_slim_ngd_dt_match, parent->of_node); data = match->data; @@ -1455,7 +1456,17 @@ static int of_qcom_slim_ngd_register(struct device *parent, } ngd->id = id; ngd->pdev->dev.parent = parent; - ngd->pdev->driver_override = QCOM_SLIM_NGD_DRV_NAME; + + ret = driver_set_override(&ngd->pdev->dev, + &ngd->pdev->driver_override, + QCOM_SLIM_NGD_DRV_NAME, + strlen(QCOM_SLIM_NGD_DRV_NAME)); + if (ret) { + platform_device_put(ngd->pdev); + kfree(ngd); + of_node_put(node); + return ret; + } ngd->pdev->dev.of_node = node; ctrl->ngd = ngd;
The driver_override field from platform driver should not be initialized from static memory (string literal) because the core later kfree() it, for example when driver_override is set via sysfs. Use dedicated helper to set driver_override properly. Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver") Cc: <stable@vger.kernel.org> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> --- drivers/slimbus/qcom-ngd-ctrl.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)