All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>,
	xen-devel@lists.xenproject.org
Cc: "Luis R. Rodriguez" <mcgrof@suse.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [RFC] libxc: check return values on mmap() and madvise() on xc_alloc_hypercall_buffer()
Date: Wed, 07 May 2014 23:10:07 +0100	[thread overview]
Message-ID: <536AAF3F.3070700@citrix.com> (raw)
In-Reply-To: <1399499244-4421-1-git-send-email-mcgrof@do-not-panic.com>

On 07/05/2014 22:47, Luis R. Rodriguez wrote:
> From: "Luis R. Rodriguez" <mcgrof@suse.com>
>
> On a Thinkpad T4440p with OpenSUSE tumbleweed with v3.15-rc4
> and today's latest xen tip from the git tree strace -f reveals
> we end up on a never ending wait shortly after
>
> write(20, "backend/console/5\0", 18 <unfinished ...>
>
> I've tracked this down to a lack of error return values on mmap() and
> madvise() on xc_alloc_hypercall_buffer(). This moves us forward.
>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
> ---

Good catch.  I am supprised this hasn't blown up in someones face .  Out
of interest, which bit starts failing given correct error handling here?

>
> BTW I see no ldconfig run after make install, where do we want to put it
> given we have a few libs ?
>
>  tools/libxc/xc_linux_osdep.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
>
>
> diff --git a/tools/libxc/xc_linux_osdep.c b/tools/libxc/xc_linux_osdep.c
> index 73860a2..32e5332 100644
> --- a/tools/libxc/xc_linux_osdep.c
> +++ b/tools/libxc/xc_linux_osdep.c
> @@ -92,14 +92,29 @@ static void *linux_privcmd_alloc_hypercall_buffer(xc_interface *xch, xc_osdep_ha
>  {
>      size_t size = npages * XC_PAGE_SIZE;
>      void *p;
> +    int rc, saved_errno;
>  
>      /* Address returned by mmap is page aligned. */
>      p = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED, -1, 0);
> +    if ( p == MAP_FAILED )
> +    {
> +        PERROR("xc_alloc_hypercall_buffer: mmap failed");
> +        return NULL;
> +    }
>  
>      /* Do not copy the VMA to child process on fork. Avoid the page being COW
>          on hypercall. */
> -    madvise(p, npages * XC_PAGE_SIZE, MADV_DONTFORK);
> +    rc = madvise(p, npages * XC_PAGE_SIZE, MADV_DONTFORK);
> +    if ( rc < 0 )
> +	    goto out;
> +

This might be cleaner like:

if ( rc == 0 )
    return p;

error cleanup;

as it is small enough to do without an out; label.  Also, you can do
without 'rc' if you are happy putting the madvise() in the if statement
itself.  'rc' isn't subsequently referenced.

~Andrew

>      return p;
> +out:
> +    saved_errno = errno;
> +    PERROR("xc_alloc_hypercall_buffer: madvise failed");
> +    (void)munmap(p, size);
> +    errno = saved_errno;
> +    return NULL;
>  }
>  
>  static void linux_privcmd_free_hypercall_buffer(xc_interface *xch, xc_osdep_handle h, void *ptr, int npages)

  reply	other threads:[~2014-05-07 22:10 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-07 21:47 [RFC] libxc: check return values on mmap() and madvise() on xc_alloc_hypercall_buffer() Luis R. Rodriguez
2014-05-07 22:10 ` Andrew Cooper [this message]
2014-05-08  5:03   ` Luis R. Rodriguez
2014-05-08 10:15     ` Ian Campbell
2014-05-08 10:34       ` Luis R. Rodriguez
2014-05-08 11:32         ` Ian Campbell
2014-05-12 12:03         ` Ian Campbell
2014-05-12 18:01           ` Luis R. Rodriguez

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=536AAF3F.3070700@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=mcgrof@do-not-panic.com \
    --cc=mcgrof@suse.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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.