All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>,
	xen-devel <xen-devel@lists.xenproject.org>
Cc: Keir Fraser <keir@xen.org>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Dario Faggioli <dario.faggioli@citrix.com>,
	Tim Deegan <tim@xen.org>,
	Ian Campbell <Ian.Campbell@eu.citrix.com>,
	Wei Liu <wei.liu2@citrix.com>
Subject: Re: [PATCH] vNUMA: validate XEN_DOMCTL_setvnumainfo input
Date: Tue, 3 Mar 2015 20:17:38 +0000	[thread overview]
Message-ID: <54F616E2.3090800@citrix.com> (raw)
In-Reply-To: <54F5D56B0200007800065BB9@mail.emea.novell.com>


[-- Attachment #1.1: Type: text/plain, Size: 3386 bytes --]

On 03/03/15 14:38, Jan Beulich wrote:
> As we get ready to use the information set for a domain here we should
> make sure it is actually valid: Both vNode and pNode numbers should be
> in range. Do a little bit of other cleanup so the code ends up looking
> reasonably consistent in style.
>
> Along with this goes that we don't need an array of unsigned int to
> store the pNode number - a nodeid_t one (a quarter the size) suffices.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

>
> --- a/xen/common/domctl.c
> +++ b/xen/common/domctl.c
> @@ -344,7 +344,7 @@ static struct vnuma_info *vnuma_alloc(un
>  
>      vnuma->vdistance = xmalloc_array(unsigned int, nr_vnodes * nr_vnodes);
>      vnuma->vcpu_to_vnode = xmalloc_array(unsigned int, nr_vcpus);
> -    vnuma->vnode_to_pnode = xmalloc_array(unsigned int, nr_vnodes);
> +    vnuma->vnode_to_pnode = xmalloc_array(nodeid_t, nr_vnodes);
>      vnuma->vmemrange = xmalloc_array(xen_vmemrange_t, nr_ranges);
>  
>      if ( vnuma->vdistance == NULL || vnuma->vmemrange == NULL ||
> @@ -382,30 +382,40 @@ static struct vnuma_info *vnuma_init(con
>                           nr_vnodes * nr_vnodes) )
>          goto vnuma_fail;
>  
> +    if ( copy_from_guest(info->vmemrange, uinfo->vmemrange,
> +                         uinfo->nr_vmemranges) )
> +        goto vnuma_fail;
> +
>      if ( copy_from_guest(info->vcpu_to_vnode, uinfo->vcpu_to_vnode,
>                           d->max_vcpus) )
>          goto vnuma_fail;
>  
> -    if ( copy_from_guest(info->vnode_to_pnode, uinfo->vnode_to_pnode,
> -                         nr_vnodes) )
> -        goto vnuma_fail;
> +    ret = -E2BIG;
> +    for ( i = 0; i < d->max_vcpus; ++i )
> +        if ( info->vcpu_to_vnode[i] >= nr_vnodes )
> +            goto vnuma_fail;
>  
> -    if (copy_from_guest(info->vmemrange, uinfo->vmemrange,
> -                        uinfo->nr_vmemranges))
> -        goto vnuma_fail;
> +    for ( i = 0; i < nr_vnodes; ++i )
> +    {
> +        unsigned int pnode;
> +
> +        ret = -EFAULT;
> +        if ( copy_from_guest_offset(&pnode, uinfo->vnode_to_pnode, i, 1) )
> +            goto vnuma_fail;
> +        ret = -E2BIG;
> +        if ( pnode >= MAX_NUMNODES )
> +            goto vnuma_fail;
> +        info->vnode_to_pnode[i] = pnode;
> +    }
>  
>      info->nr_vnodes = nr_vnodes;
>      info->nr_vmemranges = uinfo->nr_vmemranges;
>  
>      /* Check that vmemranges flags are zero. */
> +    ret = -EINVAL;
>      for ( i = 0; i < info->nr_vmemranges; i++ )
> -    {
>          if ( info->vmemrange[i].flags != 0 )
> -        {
> -            ret = -EINVAL;
>              goto vnuma_fail;
> -        }
> -    }
>  
>      return info;
>  
> --- a/xen/include/xen/domain.h
> +++ b/xen/include/xen/domain.h
> @@ -4,6 +4,7 @@
>  
>  #include <public/xen.h>
>  #include <asm/domain.h>
> +#include <asm/numa.h>
>  
>  typedef union {
>      struct vcpu_guest_context *nat;
> @@ -99,7 +100,7 @@ struct vnuma_info {
>      unsigned int nr_vmemranges;
>      unsigned int *vdistance;
>      unsigned int *vcpu_to_vnode;
> -    unsigned int *vnode_to_pnode;
> +    nodeid_t *vnode_to_pnode;
>      struct xen_vmemrange *vmemrange;
>  };
>  
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel


[-- Attachment #1.2: Type: text/html, Size: 4247 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

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

      parent reply	other threads:[~2015-03-03 20:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-03 14:38 [PATCH] vNUMA: validate XEN_DOMCTL_setvnumainfo input Jan Beulich
2015-03-03 14:46 ` Wei Liu
2015-03-03 14:53   ` Ian Campbell
2015-03-03 20:17 ` Andrew Cooper [this message]

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=54F616E2.3090800@citrix.com \
    --to=andrew.cooper3@citrix.com \
    --cc=Ian.Campbell@eu.citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=dario.faggioli@citrix.com \
    --cc=keir@xen.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@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.