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

Re: [Xen-devel] [PATCH v10 04/24] xen-xsplice: Tool to manipulate xsplice payloads



On Wed, Apr 27, 2016 at 8:27 PM, Konrad Rzeszutek Wilk
<konrad.wilk@xxxxxxxxxx> wrote:
> A simple tool that allows an system admin to perform
> basic xsplice operations:
>
>  - Upload a xsplice file (with an unique name)
>  - List all the xsplice payloads loaded.
>  - Apply, revert, replace, or unload the payload using the
>    unique name.
>  - Do all two - upload, and apply the payload in one go (load).
>    Also will use the name of the file as the <name>
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> Signed-off-by: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
[snip]
> diff --git a/tools/misc/xen-xsplice.c b/tools/misc/xen-xsplice.c
> new file mode 100644
> index 0000000..0f1ab5a
> --- /dev/null
> +++ b/tools/misc/xen-xsplice.c
> @@ -0,0 +1,463 @@
> +/*
> + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
> + */
> +
> +#include <fcntl.h>
> +#include <libgen.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <sys/mman.h>
> +#include <sys/stat.h>
> +#include <unistd.h>
> +#include <xenctrl.h>
> +#include <xenstore.h>
> +
> +static xc_interface *xch;
> +
> +void show_help(void)
> +{
> +    fprintf(stderr,
> +            "xen-xsplice: Xsplice test tool\n"
> +            "Usage: xen-xsplice <command> [args]\n"
> +            " <name> An unique name of payload. Up to %d characters.\n"
> +            "Commands:\n"
> +            "  help                   display this help\n"
> +            "  upload <name> <file>   upload file <file> with <name> name\n"
> +            "  list                   list payloads uploaded.\n"
> +            "  apply <name>           apply <name> patch.\n"
> +            "  revert <name>          revert name <name> patch.\n"
> +            "  replace <name>         apply <name> patch and revert all 
> others.\n"
> +            "  unload <name>          unload name <name> patch.\n"
> +            "  load  <file>           upload and apply <file>.\n"
> +            "                         name is the <file> name\n",
> +            XEN_XSPLICE_NAME_SIZE);
> +}
> +
> +/* wrapper function */
> +static int help_func(int argc, char *argv[])
> +{
> +    show_help();
> +    return 0;
> +}
> +
> +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
> +
> +static const char *state2str(unsigned int state)
> +{
> +#define STATE(x) [XSPLICE_STATE_##x] = #x
> +    static const char *const names[] = {
> +            STATE(CHECKED),
> +            STATE(APPLIED),
> +    };
> +#undef STATE
> +    if (state >= ARRAY_SIZE(names) || !names[state])
> +        return "unknown";
> +
> +    return names[state];
> +}
> +
> +/* This value was choosen adhoc. It could be 42 too. */
> +#define MAX_LEN 11
> +static int list_func(int argc, char *argv[])
> +{
> +    unsigned int idx, done, left, i;
> +    xen_xsplice_status_t *info = NULL;
> +    char *name = NULL;
> +    uint32_t *len = NULL;
> +    int rc = ENOMEM;
> +
> +    if ( argc )
> +    {
> +        show_help();
> +        return -1;
> +    }
> +    idx = left = 0;
> +    info = malloc(sizeof(*info) * MAX_LEN);
> +    if ( !info )
> +        return rc;
> +    name = malloc(sizeof(*name) * XEN_XSPLICE_NAME_SIZE * MAX_LEN);
> +    if ( !name )
> +    {
> +        free(info);
> +        return rc;
> +    }
> +    len = malloc(sizeof(*len) * MAX_LEN);
> +    if ( !len ) {
> +        free(name);
> +        free(info);
> +        return rc;
> +    }
> +
> +    fprintf(stdout," ID                                     | status\n"
> +                   
> "----------------------------------------+------------\n");
> +    do {
> +        done = 0;
> +        /* The memset is done to catch errors. */
> +        memset(info, 'A', sizeof(*info) * MAX_LEN);
> +        memset(name, 'B', sizeof(*name * MAX_LEN * XEN_XSPLICE_NAME_SIZE));

Did you mean to put the "* MAX_LEN * XEN_XSPLICE_NAME_SIZE" inside the
sizeof()? Coverity thinks it's "suspicious", and I do to. :-)

 -George

_______________________________________________
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®.