All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <ian.campbell@citrix.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Chao Peng <chao.p.peng@linux.intel.com>,
	Xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH] tools/xl: Fix segfaults from `xl psr-cat-cbm-set` command line handling
Date: Fri, 17 Jul 2015 09:52:23 +0100	[thread overview]
Message-ID: <1437123143.32371.274.camel@citrix.com> (raw)
In-Reply-To: <1437075165-25992-1-git-send-email-andrew.cooper3@citrix.com>

On Thu, 2015-07-16 at 20:32 +0100, Andrew Cooper wrote:
> The socket option takes a mandatory argument.  Mark it as such, so
> optarg isn't NULL when passed to trim(), which unconditionally
> dereference it.
> 
> Range check optind against argc before blindly assuming that
> argv[optind] and argv[optind+1] exist.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> CC: Ian Campbell <Ian.Campbell@citrix.com>
> CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Chao Peng <chao.p.peng@linux.intel.com>
> 
> ---
> 
> I started doing an audit of xl's command line handling, but got to the
> very first command (memmax) and found another segfault because of
> blindly assuming that argv[optind + 1] was available.
> 
> I fixed this example as I happened to use the command, but I currently
> lack the time to do a complete audit.  IMO, a full audit should be a
> blocker for 4.6, especially given the nature of XSA-137
> ---
>  tools/libxl/xl_cmdimpl.c |    9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 37d4af6..f778cbe 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -8395,7 +8395,7 @@ int main_psr_cat_cbm_set(int argc, char **argv)
>      int i, j, len;
>  
>      static struct option opts[] = {
> -        {"socket", 0, 0, 's'},
> +        {"socket", required_argument, 0, 's'},

I think we have failed to do this almost everywhere.

I think because people (like me) expected that giving : to the
corresponding short argument was sufficient, when that is not in fact
the case: val='s' here is an opaque cookie as far as the long opts are
concerned, not a reference of any kind to the short opts string, we just
happen to arrange for them to match for convenience.

In this case the short opt was wrong too, but anyway.

>          COMMON_LONG_OPTS,
>          {0, 0, 0, 0}
>      };
> @@ -8403,7 +8403,7 @@ int main_psr_cat_cbm_set(int argc, char **argv)
>      libxl_socket_bitmap_alloc(ctx, &target_map, 0);
>      libxl_bitmap_set_none(&target_map);
>  
> -    SWITCH_FOREACH_OPT(opt, "s", opts, "psr-cat-cbm-set", 1) {
> +    SWITCH_FOREACH_OPT(opt, "s:", opts, "psr-cat-cbm-set", 1) {
>      case 's':
>          trim(isspace, optarg, &value);
>          split_string_into_string_list(value, ",", &socket_list);
> @@ -8422,6 +8422,11 @@ int main_psr_cat_cbm_set(int argc, char **argv)
>      if (libxl_bitmap_is_empty(&target_map))
>          libxl_bitmap_set_any(&target_map);
>  
> +    if (argc != optind + 2) {

This implies that the final argument to SWITCH_FOREACH_OPT (the number
of required arguments after the options) is wrong and should be fixed
instead.

> +        help("psr-cat-cbm-set");
> +        return 2;
> +    }
> +
>      domid = find_domain(argv[optind]);
>      cbm = strtoll(argv[optind + 1], NULL , 0);
>  

  parent reply	other threads:[~2015-07-17  8:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-16 19:32 [PATCH] tools/xl: Fix segfaults from `xl psr-cat-cbm-set` command line handling Andrew Cooper
2015-07-16 20:29 ` Wei Liu
2015-07-17  8:52 ` Ian Campbell [this message]
2015-07-17 10:06 ` Ian Jackson

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=1437123143.32371.274.camel@citrix.com \
    --to=ian.campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.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.