On Mon, Mar 07, 2016 at 01:33:38PM +0100, Lukas Slebodnik wrote:
> On (07/03/16 12:12), Pavel Březina wrote:
> >On 03/07/2016 10:14 AM, Lukas Slebodnik wrote:
> >>ehlo,
> >>
> >>simple aptch is attached.
> >
> >When there, can you also talloc_free(attrs) on error? Thanks.
> See updated patch
> 
> LS

> From 7e70c88277d7ae3f7b953af51da4e97917923fda Mon Sep 17 00:00:00 2001
> From: Lukas Slebodnik <lsleb...@redhat.com>
> Date: Sat, 5 Mar 2016 18:57:22 +0100
> Subject: [PATCH] TOOLS: Prevent dereference of null pointer
> 
> VAR_CHECK is called with (var, EOK, ...)
> EOK would be returned in case of "var != EOK"
> and output argument _attrs would not be initialized.
> Therefore there could be dereference of null pointer
> after calling function usermod_build_attrs.

This is just a suggestion to avoid a macro which change the control
flow, i.e. call return or goto. If the code of usermod_build_attrs() is
modified like:

    if (shell) {
        attr_name = SYSDB_SHELL;
        ret = sysdb_attrs_add_string(attrs,
                                     attr_name,
                                     shell);
    }

    if (ret == EOK && home) {
        attr_name = SYSDB_HOMEDIR;
        ret = sysdb_attrs_add_string(attrs,
                                     attr_name,
                                     home);
    }

    .....

    if (ret != EOK) {
        DEBUG(SSSDBG_CRIT_FAILURE, "Could not add attribute [%s] to 
changeset.\n", attr_name);
        goto done;
    }
       

the macro can be avoided completely without adding the debug message for
every attribute.

bye,
Sumit


> ---
>  src/tools/sss_sync_ops.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/src/tools/sss_sync_ops.c b/src/tools/sss_sync_ops.c
> index 
> 5468929b691c6539cdf55f59be3560412e398f21..b2bbe4c74f5969b097af0f82bb00ca7ec35a596c
>  100644
> --- a/src/tools/sss_sync_ops.c
> +++ b/src/tools/sss_sync_ops.c
> @@ -40,7 +40,7 @@
>  #define VAR_CHECK(var, val, attr, msg) do { \
>          if (var != (val)) { \
>              DEBUG(SSSDBG_CRIT_FAILURE, msg" attribute: %s\n", attr); \
> -            return val; \
> +            goto done; \
>          } \
>  } while(0)
>  
> @@ -266,7 +266,12 @@ static int usermod_build_attrs(TALLOC_CTX *mem_ctx,
>      }
>  
>      *_attrs = attrs;
> -    return EOK;
> +    ret = EOK;
> +done:
> +    if (ret != EOK) {
> +        talloc_free(attrs);
> +    }
> +    return ret;
>  }
>  
>  /*
> -- 
> 2.7.2
> 

> _______________________________________________
> sssd-devel mailing list
> sssd-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to