All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
       [not found] <TYZPR06MB66976D6A4FC1674574531D45CE489@TYZPR06MB6697.apcprd06.prod.outlook.com>
@ 2023-05-31 12:19 ` Konrad Dybcio
  0 siblings, 0 replies; 7+ messages in thread
From: Konrad Dybcio @ 2023-05-31 12:19 UTC (permalink / raw)
  To: 路红飞,
	konradybcio, agross, andersson, neil.armstrong, linux-arm-msm,
	linux-kernel
  Cc: opensource.kernel



On 31.05.2023 12:40, 路红飞 wrote:
> 
> On 2023/5/31 17:03, Konrad Dybcio wrote:>
>> On 31.05.2023 10:54, Lu Hongfei wrote:
>>> The device_for_each_child_node loop in pmic_glink_altmode_probe should have
>>> fwnode_handle_put() before return which could avoid resource leaks.
>>> This patch could fix this bug.
>>>
>>> Fixes: 080b4e24852b ("soc: qcom: pmic_glink: Introduce altmode support")
>>>
>>> Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
>>> ---
>> This is the third revision of this patch, please version them accordingly.
>>
>> You can pass `-vN` to git format-patch and it'll do the job for you.
>>
>> Please also describe the changes since last revision below the --- line.
>>
>> Konrad
> The latter two versions have added Fixes: tag, without any changes to the
> 
> specific content of this patch.
The commit message is an integral part of the patch, it's not only the 
diff that matters. Any change deserves a new revision number, unless you
made a mistake when sending the emails (e.g. you didn't fill out the To:
and Cc: fields properly), in which case you should use the [RESEND PATCH] tag.

> 
> Just use the third version of this patch.
Which I have to dig up by hand from the tens of patches I've received
since, because you did not specify which one is the third version
in the title. This also messes with patch workflow tools like b4.

Konrad
> 
> Thanks.
> 
> Lu Hongfei
> 
>>>   drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
>>>   1 file changed, 18 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
>>> index df48fbea4b68..a7fc6570fa1e
>>> --- a/drivers/soc/qcom/pmic_glink_altmode.c
>>> +++ b/drivers/soc/qcom/pmic_glink_altmode.c
>>> @@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>>>   		ret = fwnode_property_read_u32(fwnode, "reg", &port);
>>>   		if (ret < 0) {
>>>   			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
>>> -			return ret;
>>> +			goto err_node_put;
>>>   		}
>>>   
>>>   		if (port >= ARRAY_SIZE(altmode->ports)) {
>>> @@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>>>   
>>>   		if (altmode->ports[port].altmode) {
>>>   			dev_err(dev, "multiple connector definition for port %u\n", port);
>>> -			return -EINVAL;
>>> +			ret = -EINVAL;
>>> +			goto err_node_put;
>>>   		}
>>>   
>>>   		alt_port = &altmode->ports[port];
>>> @@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>>>   
>>>   		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
>>>   		if (ret)
>>> -			return ret;
>>> +			goto err_node_put;
>>>   
>>>   		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
>>>   		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
>>>   		alt_port->dp_alt.active = 1;
>>>   
>>>   		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
>>> -		if (IS_ERR(alt_port->typec_mux))
>>> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
>>> +		if (IS_ERR(alt_port->typec_mux)) {
>>> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
>>>   					     "failed to acquire mode-switch for port: %d\n",
>>>   					     port);
>>> +			goto err_node_put;
>>> +		}
>>>   
>>>   		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
>>>   					       alt_port->typec_mux);
>>>   		if (ret)
>>> -			return ret;
>>> +			goto err_node_put;
>>>   
>>>   		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
>>> -		if (IS_ERR(alt_port->typec_switch))
>>> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
>>> +		if (IS_ERR(alt_port->typec_switch)) {
>>> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
>>>   					     "failed to acquire orientation-switch for port: %d\n",
>>>   					     port);
>>> +			goto err_node_put;
>>> +		}
>>>   
>>>   		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
>>>   					       alt_port->typec_switch);
>>>   		if (ret)
>>> -			return ret;
>>> +			goto err_node_put;
>>>   	}
>>>   
>>>   	altmode->client = devm_pmic_glink_register_client(dev,
>>> @@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>>>   							  pmic_glink_altmode_pdr_notify,
>>>   							  altmode);
>>>   	return PTR_ERR_OR_ZERO(altmode->client);
>>> +
>>> +err_node_put:
>>> +	fwnode_handle_put(fwnode);
>>> +	return ret;
>>>   }
>>>   
>>>   static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
  2023-05-31  8:54 Lu Hongfei
@ 2023-05-31  9:03 ` Konrad Dybcio
  0 siblings, 0 replies; 7+ messages in thread
From: Konrad Dybcio @ 2023-05-31  9:03 UTC (permalink / raw)
  To: Lu Hongfei, Andy Gross, Bjorn Andersson, Neil Armstrong,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel



On 31.05.2023 10:54, Lu Hongfei wrote:
> The device_for_each_child_node loop in pmic_glink_altmode_probe should have
> fwnode_handle_put() before return which could avoid resource leaks.
> This patch could fix this bug.
> 
> Fixes: 080b4e24852b ("soc: qcom: pmic_glink: Introduce altmode support")
> 
> Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
> ---
This is the third revision of this patch, please version them accordingly.

You can pass `-vN` to git format-patch and it'll do the job for you.

Please also describe the changes since last revision below the --- line.

Konrad

>  drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
>  1 file changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
> index df48fbea4b68..a7fc6570fa1e
> --- a/drivers/soc/qcom/pmic_glink_altmode.c
> +++ b/drivers/soc/qcom/pmic_glink_altmode.c
> @@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>  		ret = fwnode_property_read_u32(fwnode, "reg", &port);
>  		if (ret < 0) {
>  			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
> -			return ret;
> +			goto err_node_put;
>  		}
>  
>  		if (port >= ARRAY_SIZE(altmode->ports)) {
> @@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>  
>  		if (altmode->ports[port].altmode) {
>  			dev_err(dev, "multiple connector definition for port %u\n", port);
> -			return -EINVAL;
> +			ret = -EINVAL;
> +			goto err_node_put;
>  		}
>  
>  		alt_port = &altmode->ports[port];
> @@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>  
>  		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
>  		if (ret)
> -			return ret;
> +			goto err_node_put;
>  
>  		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
>  		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
>  		alt_port->dp_alt.active = 1;
>  
>  		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
> -		if (IS_ERR(alt_port->typec_mux))
> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
> +		if (IS_ERR(alt_port->typec_mux)) {
> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
>  					     "failed to acquire mode-switch for port: %d\n",
>  					     port);
> +			goto err_node_put;
> +		}
>  
>  		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
>  					       alt_port->typec_mux);
>  		if (ret)
> -			return ret;
> +			goto err_node_put;
>  
>  		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
> -		if (IS_ERR(alt_port->typec_switch))
> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
> +		if (IS_ERR(alt_port->typec_switch)) {
> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
>  					     "failed to acquire orientation-switch for port: %d\n",
>  					     port);
> +			goto err_node_put;
> +		}
>  
>  		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
>  					       alt_port->typec_switch);
>  		if (ret)
> -			return ret;
> +			goto err_node_put;
>  	}
>  
>  	altmode->client = devm_pmic_glink_register_client(dev,
> @@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>  							  pmic_glink_altmode_pdr_notify,
>  							  altmode);
>  	return PTR_ERR_OR_ZERO(altmode->client);
> +
> +err_node_put:
> +	fwnode_handle_put(fwnode);
> +	return ret;
>  }
>  
>  static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
@ 2023-05-31  8:54 Lu Hongfei
  2023-05-31  9:03 ` Konrad Dybcio
  0 siblings, 1 reply; 7+ messages in thread
From: Lu Hongfei @ 2023-05-31  8:54 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Neil Armstrong,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel, luhongfei

The device_for_each_child_node loop in pmic_glink_altmode_probe should have
fwnode_handle_put() before return which could avoid resource leaks.
This patch could fix this bug.

Fixes: 080b4e24852b ("soc: qcom: pmic_glink: Introduce altmode support")

Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
---
 drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index df48fbea4b68..a7fc6570fa1e
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 		ret = fwnode_property_read_u32(fwnode, "reg", &port);
 		if (ret < 0) {
 			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
-			return ret;
+			goto err_node_put;
 		}
 
 		if (port >= ARRAY_SIZE(altmode->ports)) {
@@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		if (altmode->ports[port].altmode) {
 			dev_err(dev, "multiple connector definition for port %u\n", port);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto err_node_put;
 		}
 
 		alt_port = &altmode->ports[port];
@@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
 		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
 		alt_port->dp_alt.active = 1;
 
 		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
-		if (IS_ERR(alt_port->typec_mux))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
+		if (IS_ERR(alt_port->typec_mux)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
 					     "failed to acquire mode-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
 					       alt_port->typec_mux);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
-		if (IS_ERR(alt_port->typec_switch))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
+		if (IS_ERR(alt_port->typec_switch)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
 					     "failed to acquire orientation-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
 					       alt_port->typec_switch);
 		if (ret)
-			return ret;
+			goto err_node_put;
 	}
 
 	altmode->client = devm_pmic_glink_register_client(dev,
@@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 							  pmic_glink_altmode_pdr_notify,
 							  altmode);
 	return PTR_ERR_OR_ZERO(altmode->client);
+
+err_node_put:
+	fwnode_handle_put(fwnode);
+	return ret;
 }
 
 static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
@ 2023-05-31  8:39 Lu Hongfei
  0 siblings, 0 replies; 7+ messages in thread
From: Lu Hongfei @ 2023-05-31  8:39 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson, Konrad Dybcio,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel, luhongfei

The device_for_each_child_node loop in pmic_glink_altmode_probe should have
fwnode_handle_put() before return which could avoid resource leaks.
This patch could fix this bug.

'Fixes: 080b4e24852b1 ("soc: qcom: pmic_glink: Introduce altmode support")'

Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
---
 drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index df48fbea4b68..a7fc6570fa1e
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 		ret = fwnode_property_read_u32(fwnode, "reg", &port);
 		if (ret < 0) {
 			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
-			return ret;
+			goto err_node_put;
 		}
 
 		if (port >= ARRAY_SIZE(altmode->ports)) {
@@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		if (altmode->ports[port].altmode) {
 			dev_err(dev, "multiple connector definition for port %u\n", port);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto err_node_put;
 		}
 
 		alt_port = &altmode->ports[port];
@@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
 		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
 		alt_port->dp_alt.active = 1;
 
 		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
-		if (IS_ERR(alt_port->typec_mux))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
+		if (IS_ERR(alt_port->typec_mux)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
 					     "failed to acquire mode-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
 					       alt_port->typec_mux);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
-		if (IS_ERR(alt_port->typec_switch))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
+		if (IS_ERR(alt_port->typec_switch)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
 					     "failed to acquire orientation-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
 					       alt_port->typec_switch);
 		if (ret)
-			return ret;
+			goto err_node_put;
 	}
 
 	altmode->client = devm_pmic_glink_register_client(dev,
@@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 							  pmic_glink_altmode_pdr_notify,
 							  altmode);
 	return PTR_ERR_OR_ZERO(altmode->client);
+
+err_node_put:
+	fwnode_handle_put(fwnode);
+	return ret;
 }
 
 static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
  2023-05-31  7:55 Lu Hongfei
@ 2023-05-31  8:18 ` Mukesh Ojha
  0 siblings, 0 replies; 7+ messages in thread
From: Mukesh Ojha @ 2023-05-31  8:18 UTC (permalink / raw)
  To: Lu Hongfei, Andy Gross, Bjorn Andersson, Konrad Dybcio,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel



On 5/31/2023 1:25 PM, Lu Hongfei wrote:
> The device_for_each_child_node loop in pmic_glink_altmode_probe should have
> fwnode_handle_put() before return which could avoid resource leaks.
> This patch could fix this bug.
> 
> Signed-off-by: Lu Hongfei <luhongfei@vivo.com>

Use  Fixes: tag

Otherwise LGTM.

Reviewed-by: Mukesh Ojha <quic_mojha@quicinc.com>

-- Mukesh

> ---
>   drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
>   1 file changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
> index df48fbea4b68..a7fc6570fa1e
> --- a/drivers/soc/qcom/pmic_glink_altmode.c
> +++ b/drivers/soc/qcom/pmic_glink_altmode.c
> @@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>   		ret = fwnode_property_read_u32(fwnode, "reg", &port);
>   		if (ret < 0) {
>   			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
> -			return ret;
> +			goto err_node_put;
>   		}
>   
>   		if (port >= ARRAY_SIZE(altmode->ports)) {
> @@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>   
>   		if (altmode->ports[port].altmode) {
>   			dev_err(dev, "multiple connector definition for port %u\n", port);
> -			return -EINVAL;
> +			ret = -EINVAL;
> +			goto err_node_put;
>   		}
>   
>   		alt_port = &altmode->ports[port];
> @@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>   
>   		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
>   		if (ret)
> -			return ret;
> +			goto err_node_put;
>   
>   		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
>   		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
>   		alt_port->dp_alt.active = 1;
>   
>   		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
> -		if (IS_ERR(alt_port->typec_mux))
> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
> +		if (IS_ERR(alt_port->typec_mux)) {
> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
>   					     "failed to acquire mode-switch for port: %d\n",
>   					     port);
> +			goto err_node_put;
> +		}
>   
>   		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
>   					       alt_port->typec_mux);
>   		if (ret)
> -			return ret;
> +			goto err_node_put;
>   
>   		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
> -		if (IS_ERR(alt_port->typec_switch))
> -			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
> +		if (IS_ERR(alt_port->typec_switch)) {
> +			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
>   					     "failed to acquire orientation-switch for port: %d\n",
>   					     port);
> +			goto err_node_put;
> +		}
>   
>   		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
>   					       alt_port->typec_switch);
>   		if (ret)
> -			return ret;
> +			goto err_node_put;
>   	}
>   
>   	altmode->client = devm_pmic_glink_register_client(dev,
> @@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
>   							  pmic_glink_altmode_pdr_notify,
>   							  altmode);
>   	return PTR_ERR_OR_ZERO(altmode->client);
> +
> +err_node_put:
> +	fwnode_handle_put(fwnode);
> +	return ret;
>   }
>   
>   static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
@ 2023-05-31  7:55 Lu Hongfei
  2023-05-31  8:18 ` Mukesh Ojha
  0 siblings, 1 reply; 7+ messages in thread
From: Lu Hongfei @ 2023-05-31  7:55 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson, Konrad Dybcio,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel, luhongfei

The device_for_each_child_node loop in pmic_glink_altmode_probe should have
fwnode_handle_put() before return which could avoid resource leaks.
This patch could fix this bug.

Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
---
 drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index df48fbea4b68..a7fc6570fa1e
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -395,7 +395,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 		ret = fwnode_property_read_u32(fwnode, "reg", &port);
 		if (ret < 0) {
 			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
-			return ret;
+			goto err_node_put;
 		}
 
 		if (port >= ARRAY_SIZE(altmode->ports)) {
@@ -405,7 +405,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		if (altmode->ports[port].altmode) {
 			dev_err(dev, "multiple connector definition for port %u\n", port);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto err_node_put;
 		}
 
 		alt_port = &altmode->ports[port];
@@ -420,33 +421,37 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
 		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
 		alt_port->dp_alt.active = 1;
 
 		alt_port->typec_mux = fwnode_typec_mux_get(fwnode);
-		if (IS_ERR(alt_port->typec_mux))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
+		if (IS_ERR(alt_port->typec_mux)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
 					     "failed to acquire mode-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
 					       alt_port->typec_mux);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
-		if (IS_ERR(alt_port->typec_switch))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
+		if (IS_ERR(alt_port->typec_switch)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
 					     "failed to acquire orientation-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
 					       alt_port->typec_switch);
 		if (ret)
-			return ret;
+			goto err_node_put;
 	}
 
 	altmode->client = devm_pmic_glink_register_client(dev,
@@ -455,6 +460,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 							  pmic_glink_altmode_pdr_notify,
 							  altmode);
 	return PTR_ERR_OR_ZERO(altmode->client);
+
+err_node_put:
+	fwnode_handle_put(fwnode);
+	return ret;
 }
 
 static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops
@ 2023-05-31  6:44 Lu Hongfei
  0 siblings, 0 replies; 7+ messages in thread
From: Lu Hongfei @ 2023-05-31  6:44 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson, Konrad Dybcio,
	open list:ARM/QUALCOMM SUPPORT, open list
  Cc: opensource.kernel, luhongfei

The device_for_each_child_node loop in pmic_glink_altmode_probe should have
fwnode_handle_put() before return which could avoid resource leaks.
This patch could fix this bug.

Signed-off-by: Lu Hongfei <luhongfei@vivo.com>
---
 drivers/soc/qcom/pmic_glink_altmode.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index 4d7895bdeaf2..3faabaf9ef08
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -396,7 +396,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 		ret = fwnode_property_read_u32(fwnode, "reg", &port);
 		if (ret < 0) {
 			dev_err(dev, "missing reg property of %pOFn\n", fwnode);
-			return ret;
+			goto err_node_put;
 		}
 
 		if (port >= ARRAY_SIZE(altmode->ports)) {
@@ -406,7 +406,8 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		if (altmode->ports[port].altmode) {
 			dev_err(dev, "multiple connector definition for port %u\n", port);
-			return -EINVAL;
+			ret = -EINVAL;
+			goto err_node_put;
 		}
 
 		alt_port = &altmode->ports[port];
@@ -421,7 +422,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 
 		ret = devm_drm_bridge_add(dev, &alt_port->bridge);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->dp_alt.svid = USB_TYPEC_DP_SID;
 		alt_port->dp_alt.mode = USB_TYPEC_DP_MODE;
@@ -430,26 +431,30 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 		mux_desc.svid = USB_TYPEC_DP_SID;
 		mux_desc.mode = USB_TYPEC_DP_MODE;
 		alt_port->typec_mux = fwnode_typec_mux_get(fwnode, &mux_desc);
-		if (IS_ERR(alt_port->typec_mux))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
+		if (IS_ERR(alt_port->typec_mux)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_mux),
 					     "failed to acquire mode-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_mux,
 					       alt_port->typec_mux);
 		if (ret)
-			return ret;
+			goto err_node_put;
 
 		alt_port->typec_switch = fwnode_typec_switch_get(fwnode);
-		if (IS_ERR(alt_port->typec_switch))
-			return dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
+		if (IS_ERR(alt_port->typec_switch)) {
+			ret = dev_err_probe(dev, PTR_ERR(alt_port->typec_switch),
 					     "failed to acquire orientation-switch for port: %d\n",
 					     port);
+			goto err_node_put;
+		}
 
 		ret = devm_add_action_or_reset(dev, pmic_glink_altmode_put_switch,
 					       alt_port->typec_switch);
 		if (ret)
-			return ret;
+			goto err_node_put;
 	}
 
 	altmode->client = devm_pmic_glink_register_client(dev,
@@ -458,6 +463,10 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,
 							  pmic_glink_altmode_pdr_notify,
 							  altmode);
 	return PTR_ERR_OR_ZERO(altmode->client);
+
+err_node_put:
+	fwnode_handle_put(fwnode);
+	return ret;
 }
 
 static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-05-31 12:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <TYZPR06MB66976D6A4FC1674574531D45CE489@TYZPR06MB6697.apcprd06.prod.outlook.com>
2023-05-31 12:19 ` [PATCH] soc: qcom: pmic: Fix resource leaks in device_for_each_child_node() loops Konrad Dybcio
2023-05-31  8:54 Lu Hongfei
2023-05-31  9:03 ` Konrad Dybcio
  -- strict thread matches above, loose matches on Subject: below --
2023-05-31  8:39 Lu Hongfei
2023-05-31  7:55 Lu Hongfei
2023-05-31  8:18 ` Mukesh Ojha
2023-05-31  6:44 Lu Hongfei

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.