All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Ian Jackson <ian.jackson@eu.citrix.com>, xen-devel@lists.xensource.com
Cc: Wei Liu <wei.liu2@citrix.com>, security@xenproject.org
Subject: Re: [PATCH] libxl: Fix error handling in libxl_userdata_unlink
Date: Wed, 24 Sep 2014 15:39:34 +0100	[thread overview]
Message-ID: <5422D7A6.5030201@citrix.com> (raw)
In-Reply-To: <1411569004-30623-1-git-send-email-ian.jackson@eu.citrix.com>

On 24/09/14 15:30, Ian Jackson wrote:
> Previously:
>   * rc would not be set before leaving the function, with the
>     result that an uninitialised value would be returned
>   * failures of libxl__userdata_path would result in a NULL dereference
>   * failures of unlink() would not be usefully logged
>
> This appears to be due to an attempt to avoid having to repeat the
> call to libxl__unlock_domain_userdata by informally sharing parts of
> the success and failure paths.
>
> Change to use the canonical error-handling style:
>   * Initialise lock to 0.
>   * Do the unlock in the `out' section - always attempt to unlock
>     lock if it is non-0.
>   * Explicitly set rc and `goto out' on all error paths, even
>     those right at the end of the function.
>   * Add an error check for filename = libxl__userdata_path(...);
>
> (CCing security@ because they receive the Coverity reports.  This is
> not a security problem AFAICT.)

How about coverty@ which includes some of us not on securty@ ?

>
> Coverity-ID: 1240237, 1240235.
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: security@xenproject.org
> Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
> ---
>  tools/libxl/libxl_dom.c |   20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
> index bd21841..9eb74ec 100644
> --- a/tools/libxl/libxl_dom.c
> +++ b/tools/libxl/libxl_dom.c
> @@ -2097,12 +2097,12 @@ int libxl_userdata_unlink(libxl_ctx *ctx, uint32_t domid,
>                            const char *userdata_userid)
>  {
>      GC_INIT(ctx);
> -    int rc;
> +    CTX_LOCK;
>  
> -    libxl__domain_userdata_lock *lock;
> +    int rc;
> +    libxl__domain_userdata_lock *lock = 0;

Pointers should be initialised to NULL rather than 0.

With this change, Reviewed-by: Andrew Cooper<andrew.cooper3@citrix.com>

>      const char *filename;
>  
> -    CTX_LOCK;
>      lock = libxl__lock_domain_userdata(gc, domid);
>      if (!lock) {
>          rc = ERROR_LOCK_FAIL;
> @@ -2110,10 +2110,20 @@ int libxl_userdata_unlink(libxl_ctx *ctx, uint32_t domid,
>      }
>  
>      filename = libxl__userdata_path(gc, domid, userdata_userid, "d");
> -    if (unlink(filename)) rc = ERROR_FAIL;
> +    if (!filename) {
> +        rc = ERROR_FAIL;
> +        goto out;
> +    }
> +    if (unlink(filename)) {
> +        LOGE(ERROR, "error deleting userdata file: %s", filename);
> +        rc = ERROR_FAIL;
> +        goto out;
> +    }
>  
> -    libxl__unlock_domain_userdata(lock);
> +    rc = 0;
>  out:
> +    if (lock)
> +        libxl__unlock_domain_userdata(lock);
>      CTX_UNLOCK;
>      GC_FREE;
>      return rc;

  reply	other threads:[~2014-09-24 14:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <5422aad1e5ef3_72bf92732c895b9@scan.coverity.com.mail>
2014-09-24 14:30 ` [PATCH] libxl: Fix error handling in libxl_userdata_unlink Ian Jackson
2014-09-24 14:39   ` Andrew Cooper [this message]
2014-10-08 10:56     ` Ian Jackson
2014-10-02  8:59   ` Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5422D7A6.5030201@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=security@xenproject.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.