Message ID | 20210331114919.370053-2-adrien.grassein@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fixes 30e2ae943c26 "drm/bridge: Introduce LT8912B DSI to HDMI" | expand |
Thanks! regards, dan carpenter
W dniu 31.03.2021 o 13:49, Adrien Grassein pisze: > Some issues where found during static analysis of this driver. Subject should describe what has been fixed, description why. If there is multiple different issues maybe patch split would be better. > > Reported-by: Dan Carpenter <dan.carpenter@oracle.com> > Suggested-by: Dan Carpenter <dan.carpenter@oracle.com> > Signed-off-by: Adrien Grassein <adrien.grassein@gmail.com> > --- > drivers/gpu/drm/bridge/lontium-lt8912b.c | 27 +++++++++++++++--------- > 1 file changed, 17 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c > index 61491615bad0..4c8d79142262 100644 > --- a/drivers/gpu/drm/bridge/lontium-lt8912b.c > +++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c > @@ -621,7 +621,8 @@ static int lt8912_parse_dt(struct lt8912 *lt) > { > struct gpio_desc *gp_reset; > struct device *dev = lt->dev; > - int ret = 0; > + int ret; > + int data_lanes; > struct device_node *port_node; > struct device_node *endpoint; > > @@ -635,13 +636,16 @@ static int lt8912_parse_dt(struct lt8912 *lt) > lt->gp_reset = gp_reset; > > endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1); > - if (IS_ERR(endpoint)) { > - ret = PTR_ERR(endpoint); > - goto end; > - } > + if (!endpoint) > + return -ENODEV; > > - lt->data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); > + data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); > of_node_put(endpoint); > + if (data_lanes < 0) { > + dev_err(lt->dev, "%s: Bad data-lanes property\n", __func__); > + return data_lanes; > + } > + lt->data_lanes = data_lanes; > > lt->host_node = of_graph_get_remote_node(dev->of_node, 0, -1); > if (!lt->host_node) { > @@ -658,19 +662,22 @@ static int lt8912_parse_dt(struct lt8912 *lt) > } > > lt->hdmi_port = of_drm_find_bridge(port_node); > - if (IS_ERR(lt->hdmi_port)) { > + if (!lt->hdmi_port) { > dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); > - ret = PTR_ERR(lt->hdmi_port); > - of_node_put(lt->host_node); > - goto end; > + ret = -ENODEV; > + of_node_put(port_node); > + goto err_free_host_node; > } > > if (!of_device_is_compatible(port_node, "hdmi-connector")) { > dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); > + of_node_put(port_node); > ret = -EINVAL; > + goto err_free_host_node; Maybe better would be to put of_node_put(port_node) after err_free_host_node label - of_node_put(NULL) does nothing. > } > > of_node_put(port_node); > + return 0; > > end: > return ret; This label and code can be removed, am I right? After reading the body I know what the patch does, so I can propose the subject, what about "fix incorrect handling of of_* return values". And please make description more descriptive :) With that fixed you can add my: Reviewed-by: Andrzej Hajda <a.hajda@samsung.com> Regards Andrzej
On Wed, Mar 31, 2021 at 02:57:31PM +0200, Andrzej Hajda wrote: > > > > if (!of_device_is_compatible(port_node, "hdmi-connector")) { > > dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); > > + of_node_put(port_node); > > ret = -EINVAL; > > + goto err_free_host_node; > > Maybe better would be to put of_node_put(port_node) after > err_free_host_node label - of_node_put(NULL) does nothing. > I prefer this style for several reasons: 1) I kind of hate no-op puts 2) The port_node is not part of the wind up in the sense that we don't leave hold the reference on the success path. It's the same with locking, I prefer if unlock happens before the goto. Sometimes people do an unlock as part of the unwind but this style only works for the first label in the unwind path. 3) I like when you can copy and paste the unwind code to create the release function, lt8912_put_dt() in this example. Normally you have to add one more release function because most times the last failure path is an allocation but in this case the release is just of_node_put(lt->host_node); But, yeah, putting the of_node_put() after the label isn't bug so whatever... regards, dan carpenter
diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c index 61491615bad0..4c8d79142262 100644 --- a/drivers/gpu/drm/bridge/lontium-lt8912b.c +++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c @@ -621,7 +621,8 @@ static int lt8912_parse_dt(struct lt8912 *lt) { struct gpio_desc *gp_reset; struct device *dev = lt->dev; - int ret = 0; + int ret; + int data_lanes; struct device_node *port_node; struct device_node *endpoint; @@ -635,13 +636,16 @@ static int lt8912_parse_dt(struct lt8912 *lt) lt->gp_reset = gp_reset; endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1); - if (IS_ERR(endpoint)) { - ret = PTR_ERR(endpoint); - goto end; - } + if (!endpoint) + return -ENODEV; - lt->data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); + data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); of_node_put(endpoint); + if (data_lanes < 0) { + dev_err(lt->dev, "%s: Bad data-lanes property\n", __func__); + return data_lanes; + } + lt->data_lanes = data_lanes; lt->host_node = of_graph_get_remote_node(dev->of_node, 0, -1); if (!lt->host_node) { @@ -658,19 +662,22 @@ static int lt8912_parse_dt(struct lt8912 *lt) } lt->hdmi_port = of_drm_find_bridge(port_node); - if (IS_ERR(lt->hdmi_port)) { + if (!lt->hdmi_port) { dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); - ret = PTR_ERR(lt->hdmi_port); - of_node_put(lt->host_node); - goto end; + ret = -ENODEV; + of_node_put(port_node); + goto err_free_host_node; } if (!of_device_is_compatible(port_node, "hdmi-connector")) { dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); + of_node_put(port_node); ret = -EINVAL; + goto err_free_host_node; } of_node_put(port_node); + return 0; end: return ret;
Some issues where found during static analysis of this driver. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Suggested-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Adrien Grassein <adrien.grassein@gmail.com> --- drivers/gpu/drm/bridge/lontium-lt8912b.c | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-)