[PATCH 2/3] broadband-modem-mbim: prevent potential leak when scanning networks

Aleksander Morgado aleksander at lanedo.com
Tue Dec 10 01:29:11 PST 2013


On 10/12/13 00:07, Ben Chan wrote:
> This patch addresses a potential memory leak when scan_networks in
> MMBroadbandModemMbim is called but the caller does not provide a
> GAsyncReadyCallback.
> 
> Reported by Aleksander Morgado <aleksander at lanedo.com>
> ---

Pushed, thanks!


>  src/mm-broadband-modem-mbim.c | 38 +++++++++++++++++++-------------------
>  1 file changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
> index b4d3ff1..774209e 100644
> --- a/src/mm-broadband-modem-mbim.c
> +++ b/src/mm-broadband-modem-mbim.c
> @@ -2308,10 +2308,25 @@ modem_3gpp_scan_networks_finish (MMIfaceModem3gpp *self,
>                                   GAsyncResult *res,
>                                   GError **error)
>  {
> +    MbimMessage *response;
> +    MbimProvider **providers;
> +    guint n_providers;
> +    GList *info_list = NULL;
> +
>      if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
>          return NULL;
>  
> -    return g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
> +    response = (MbimMessage *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
> +    if (mbim_message_command_done_get_result (response, error) &&
> +        mbim_message_visible_providers_response_parse (response,
> +                                                       &n_providers,
> +                                                       &providers,
> +                                                       error)) {
> +        info_list = mm_3gpp_network_info_list_from_mbim_providers ((const MbimProvider *const *)providers,
> +                                                                   n_providers);
> +        mbim_provider_array_free (providers);
> +    }
> +    return info_list;
>  }
>  
>  static void
> @@ -2321,28 +2336,13 @@ visible_providers_query_ready (MbimDevice *device,
>  {
>      MbimMessage *response;
>      GError *error = NULL;
> -    MbimProvider **providers;
> -    guint n_providers;
>  
>      response = mbim_device_command_finish (device, res, &error);
> -    if (response &&
> -        mbim_message_command_done_get_result (response, &error) &&
> -        mbim_message_visible_providers_response_parse (
> -            response,
> -            &n_providers,
> -            &providers,
> -            &error)) {
> -        GList *info_list;
> -
> -        info_list = mm_3gpp_network_info_list_from_mbim_providers ((const MbimProvider *const *)providers,
> -                                                                   n_providers);
> -        g_simple_async_result_set_op_res_gpointer (simple, info_list, NULL);
> -        mbim_provider_array_free (providers);
> -    } else
> +    if (response)
> +        g_simple_async_result_set_op_res_gpointer (simple, response, (GDestroyNotify)mbim_message_unref);
> +    else
>          g_simple_async_result_take_error (simple, error);
>  
> -    if (response)
> -        mbim_message_unref (response);
>      g_simple_async_result_complete (simple);
>      g_object_unref (simple);
>  }
> 


-- 
Aleksander


More information about the ModemManager-devel mailing list