[systemd-devel] [PATCH] kdbus: free returned buffer when the memory is no longer needed

Lennart Poettering lennart at poettering.net
Mon Oct 20 11:12:18 PDT 2014


On Thu, 16.10.14 19:01, Lukasz Skalski (l.skalski at samsung.com) wrote:

Looks good! Applied! Thanks!

> ---
>  src/libsystemd/sd-bus/bus-control.c | 43 ++++++++++++++++++++++++-------------
>  1 file changed, 28 insertions(+), 15 deletions(-)
> 
> diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c
> index 7b106a3..9bb6e5b 100644
> --- a/src/libsystemd/sd-bus/bus-control.c
> +++ b/src/libsystemd/sd-bus/bus-control.c
> @@ -265,12 +265,14 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
>                  if ((flags & KDBUS_NAME_LIST_UNIQUE) && name->owner_id != previous_id) {
>                          char *n;
>  
> -                        if (asprintf(&n, ":1.%llu", (unsigned long long) name->owner_id) < 0)
> -                                return -ENOMEM;
> +                        if (asprintf(&n, ":1.%llu", (unsigned long long) name->owner_id) < 0) {
> +                                r = -ENOMEM;
> +                                goto fail;
> +                        }
>  
>                          r = strv_consume(x, n);
>                          if (r < 0)
> -                                return r;
> +                                goto fail;
>  
>                          previous_id = name->owner_id;
>                  }
> @@ -281,16 +283,18 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
>  
>                  if (entry_name && service_name_is_valid(entry_name)) {
>                          r = strv_extend(x, entry_name);
> -                        if (r < 0)
> -                                return -ENOMEM;
> +                        if (r < 0) {
> +                                r = -ENOMEM;
> +                                goto fail;
> +                        }
>                  }
>          }
>  
> -        r = kernel_cmd_free(bus, cmd.offset);
> -        if (r < 0)
> -                return r;
> +        r = 0;
>  
> -        return 0;
> +fail:
> +        kernel_cmd_free(bus, cmd.offset);
> +        return r;
>  }
>  
>  static int bus_list_names_kernel(sd_bus *bus, char ***acquired, char ***activatable) {
> @@ -428,16 +432,25 @@ static int bus_get_owner_kdbus(
>          conn_info = (struct kdbus_conn_info *) ((uint8_t *) bus->kdbus_buffer + cmd->offset);
>  
>          /* Non-activated names are considered not available */
> -        if (conn_info->flags & KDBUS_HELLO_ACTIVATOR)
> -                return name[0] == ':' ? -ENXIO : -ESRCH;
> +        if (conn_info->flags & KDBUS_HELLO_ACTIVATOR) {
> +                if (name[0] == ':')
> +                        r = -ENXIO;
> +                else
> +                        r = -ESRCH;
> +                goto fail;
> +        }
>  
>          c = bus_creds_new();
> -        if (!c)
> -                return -ENOMEM;
> +        if (!c) {
> +                r = -ENOMEM;
> +                goto fail;
> +        }
>  
>          if (mask & SD_BUS_CREDS_UNIQUE_NAME) {
> -                if (asprintf(&c->unique_name, ":1.%llu", (unsigned long long) conn_info->id) < 0)
> -                        return -ENOMEM;
> +                if (asprintf(&c->unique_name, ":1.%llu", (unsigned long long) conn_info->id) < 0) {
> +                        r = -ENOMEM;
> +                        goto fail;
> +                }
>  
>                  c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
>          }
> -- 
> 1.9.3
> 
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
> 


Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list