[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH XEN v8 24/29] tools/libs/call: linux: touch newly allocated pages after madvise lockdown



On Fri, Jan 15, 2016 at 01:23:03PM +0000, Ian Campbell wrote:
> This avoids a potential issue with a fork after allocation but before
> madvise.
> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
> v7: New, replacing "tools/libs/call: linux: avoid forking between mmap
>     and madvise".
> ---
>  tools/libs/call/linux.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/libs/call/linux.c b/tools/libs/call/linux.c
> index 3641e41..651f380 100644
> --- a/tools/libs/call/linux.c
> +++ b/tools/libs/call/linux.c

I didn't notice you only handled this for Linux until now.

I think FreeBSD and NetBSD need similar treatment, too? But then current
BSD* code doesn't even support DONTFORK in madvise.

Adding Roger for more input.

The changes in this patch look fine to me.

Wei.

> @@ -88,7 +88,7 @@ void *osdep_alloc_pages(xencall_handle *xcall, size_t 
> npages)
>  {
>      size_t size = npages * PAGE_SIZE;
>      void *p;
> -    int rc, saved_errno;
> +    int rc, i, 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);
> @@ -107,6 +107,18 @@ void *osdep_alloc_pages(xencall_handle *xcall, size_t 
> npages)
>          goto out;
>      }
>  
> +    /*
> +     * Touch each page in turn to force them to be un-CoWed, in case a
> +     * fork happened in another thread at an inopportune moment
> +     * above. The madvise() will prevent any subsequent fork calls from
> +     * causing the same problem.
> +     */
> +    for ( i = 0; i < npages ; i++ )
> +    {
> +        char *c = (char *)p + (i*PAGE_SIZE);
> +        *c = 0;
> +    }
> +
>      return p;
>  
>  out:
> -- 
> 2.1.4
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.