diff mbox series

scr:Set property mode failed,memory leak

Message ID 20200818012424.8174-1-515672508@qq.com (mailing list archive)
State Accepted
Delegated to: Luiz Von Dentz
Headers show
Series scr:Set property mode failed,memory leak | expand

Commit Message

chengbo Aug. 18, 2020, 1:24 a.m. UTC
This patch will fix a memory leak,when set property mode,
it will creat a request,if failed,the data's memory do not free
---
 src/adapter.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)


 	g_free(data);
 
 failed:

Comments

Luiz Augusto von Dentz Aug. 18, 2020, 4:45 a.m. UTC | #1
Hi Chengbo,

On Mon, Aug 17, 2020 at 6:24 PM chengbo <515672508@qq.com> wrote:
>
> This patch will fix a memory leak,when set property mode,
> it will creat a request,if failed,the data's memory do not free
> ---
>  src/adapter.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 5e896a9f0..3d07921a7 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -2917,9 +2917,10 @@ static void property_set_mode(struct btd_adapter *adapter, uint32_t setting,
>         data->id = id;
>
>         if (mgmt_send(adapter->mgmt, opcode, adapter->dev_id, len, param,
> -                       property_set_mode_complete, data, g_free) > 0)
> +                       property_set_mode_complete, data, g_free) > 0) {
> +               g_free(data);
>                 return;
> -
> +       }
>
> In the original code,if mgmt_send fails then 0 is returned,then this function return directly,do not free data.
> Therefore, you need to free data before executing return.

Nope, if (0 > 0) will evaluate to false so it will continue and the
code below will be executed, the if branch is testing for success case
not the opposite and that is why there is no goto failed either.

>
>         g_free(data);
>
>  failed:
> --
> 2.20.1
>
>
>
diff mbox series

Patch

diff --git a/src/adapter.c b/src/adapter.c
index 5e896a9f0..3d07921a7 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2917,9 +2917,10 @@  static void property_set_mode(struct btd_adapter *adapter, uint32_t setting,
 	data->id = id;
 
 	if (mgmt_send(adapter->mgmt, opcode, adapter->dev_id, len, param,
-			property_set_mode_complete, data, g_free) > 0)
+			property_set_mode_complete, data, g_free) > 0) {
+		g_free(data);
 		return;
-
+	}

In the original code,if mgmt_send fails then 0 is returned,then this function return directly,do not free data.
Therefore, you need to free data before executing return.