All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: xen-devel@lists.xen.org
Subject: Re: [PATCH v4 07/33] xen: guestcopy: Provide an helper to safely copy string from guest
Date: Tue, 31 Mar 2015 14:24:16 +0100	[thread overview]
Message-ID: <551AA000.6090603@citrix.com> (raw)
In-Reply-To: <1426793399-6283-8-git-send-email-julien.grall@linaro.org>

On 19/03/15 19:29, Julien Grall wrote:
> Flask code already provides a helper to copy a string from guest. In a later
> patch, the new DT hypercalls will need a similar function.
>
> To avoid code duplication, copy the flask helper (flask_copying_string) to
> common code:
>     - Rename into safe_copy_string_from_guest
>     - Add comment to explain the extra +1
>     - Return the buffer directly and use the macros provided by
>     xen/err.h to return an error code if necessary.
>
> Signed-off-by: Julien Grall <julien.grall@linaro.org>
> Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Jan Beulich <jbeulich@suse.com>
> Cc: Keir Fraser <keir@xen.org>
>
> ---
>     Changes in v4:
>         - Use -ENOBUFS rather than -ENOENT
>         - Fix coding style in comment
>         - Typoes in commit message
>         - Convert the new flask_copying_string (for DT) in
>         safe_copy_string_from_guest
>         - Add Ian and Daniel's ack
>
>     Changes in v3:
>         - Use macros of xen/err.h to return either the buffer or an
>         error code
>         - Reuse size_t instead of unsigned long
>         - Update comment and commit message
>
>     Changes in v2:
>         - Rename copy_string_from_guest into safe_copy_string_from_guest
>         - Update commit message and comment in the code
> ---
>  xen/common/Makefile            |  1 +
>  xen/common/guestcopy.c         | 31 ++++++++++++++++++++++++++
>  xen/include/xen/guest_access.h |  5 +++++
>  xen/xsm/flask/flask_op.c       | 49 +++++++++++-------------------------------
>  4 files changed, 50 insertions(+), 36 deletions(-)
>  create mode 100644 xen/common/guestcopy.c
>
> diff --git a/xen/common/Makefile b/xen/common/Makefile
> index 1956091..cf15887 100644
> --- a/xen/common/Makefile
> +++ b/xen/common/Makefile
> @@ -9,6 +9,7 @@ obj-y += event_2l.o
>  obj-y += event_channel.o
>  obj-y += event_fifo.o
>  obj-y += grant_table.o
> +obj-y += guestcopy.o
>  obj-y += irq.o
>  obj-y += kernel.o
>  obj-y += keyhandler.o
> diff --git a/xen/common/guestcopy.c b/xen/common/guestcopy.c
> new file mode 100644
> index 0000000..1645cbd
> --- /dev/null
> +++ b/xen/common/guestcopy.c
> @@ -0,0 +1,31 @@
> +#include <xen/config.h>
> +#include <xen/lib.h>
> +#include <xen/guest_access.h>
> +#include <xen/err.h>
> +
> +/*
> + * The function copies a string from the guest and adds a NUL to
> + * make sure the string is correctly terminated.
> + */
> +void *safe_copy_string_from_guest(XEN_GUEST_HANDLE(char) u_buf,
> +                                  size_t size, size_t max_size)

If it is a NUL terminated string, you should return char* rather than void*.

Furthermore, two size parameters serves no useful purpose.  The caller
must always be in a position to decide a plausible upper bound.

> +{
> +    char *tmp;
> +
> +    if ( size > max_size )
> +        return ERR_PTR(-ENOBUFS);
> +
> +    /* Add an extra +1 to append \0 */
> +    tmp = xmalloc_array(char, size + 1);

Need to check that size + 1 doesn't overflow to 0.

> +    if ( !tmp )
> +        return ERR_PTR(-ENOMEM);
> +
> +    if ( copy_from_guest(tmp, u_buf, size) )
> +    {
> +        xfree(tmp);
> +        return ERR_PTR(-EFAULT);
> +    }
> +    tmp[size] = 0;

'\0' please.

~Andrew

  reply	other threads:[~2015-03-31 13:24 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-19 19:29 [PATCH v4 00/33] xen/arm: Add support for non-PCI passthrough Julien Grall
2015-03-19 19:29 ` [PATCH v4 01/33] xen/arm: Divide GIC initialization in 2 parts Julien Grall
2015-03-31 11:44   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 02/33] xen/dts: Allow only IRQ translation that are mapped to main GIC Julien Grall
2015-03-19 19:29 ` [PATCH v4 03/33] xen/dts: Use unsigned int for MMIO and IRQ index Julien Grall
2015-03-19 19:29 ` [PATCH v4 04/33] xen/arm: vgic: Introduce a function to initialize pending_irq Julien Grall
2015-03-19 19:29 ` [PATCH v4 05/33] xen/arm: Map disabled device in DOM0 Julien Grall
2015-03-19 19:29 ` [PATCH v4 06/33] xen/arm: Introduce xen, passthrough property Julien Grall
2015-03-31 10:25   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 07/33] xen: guestcopy: Provide an helper to safely copy string from guest Julien Grall
2015-03-31 13:24   ` Andrew Cooper [this message]
2015-03-31 13:30     ` Julien Grall
2015-03-31 13:49       ` Andrew Cooper
2015-03-31 14:00         ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 08/33] MAINTAINERS: move drivers/passthrough/device_tree.c in "DEVICE TREE" Julien Grall
2015-03-31 10:26   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 09/33] xen: Extend DOMCTL createdomain to support arch configuration Julien Grall
2015-03-31 10:39   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 10/33] xen/arm: Allow virq != irq Julien Grall
2015-03-31 10:41   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 11/33] xen/arm: route_irq_to_guest: Check validity of the IRQ Julien Grall
2015-03-20 11:36   ` Stefano Stabellini
2015-03-31 10:43   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 12/33] xen/arm: gic: Add sanity checks gic_route_irq_to_guest Julien Grall
2015-03-31 10:44   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 13/33] xen/arm: gic_route_irq_to_guest: Honor the priority given in parameter Julien Grall
2015-03-20 11:51   ` Stefano Stabellini
2015-03-31 10:45   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 14/33] xen/arm: vgic: Correctly calculate GICD_TYPER.ITLinesNumber Julien Grall
2015-03-31 10:46   ` Ian Campbell
2015-03-31 11:28     ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 15/33] xen/arm: gic: GICv2 & GICv3 only supports 1020 physical interrupts Julien Grall
2015-03-31 10:47   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 16/33] xen/arm: Let the toolstack configure the number of SPIs Julien Grall
2015-03-31 10:54   ` Ian Campbell
2015-03-31 11:44     ` Julien Grall
2015-03-31 11:59       ` Ian Campbell
2015-03-31 12:07         ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 17/33] xen/arm: vgic: Add spi_to_pending Julien Grall
2015-03-31 10:55   ` Ian Campbell
2015-03-31 11:58     ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 18/33] xen/arm: Release IRQ routed to a domain when it's destroying Julien Grall
2015-03-31 10:58   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 19/33] xen/arm: Implement hypercall DOMCTL_{, un}bind_pt_pirq Julien Grall
2015-03-31 11:11   ` Ian Campbell
2015-03-31 12:23     ` Julien Grall
2015-03-31 12:31       ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 20/33] xen/dts: Provide an helper to get a DT node from a path provided by a guest Julien Grall
2015-03-31 11:12   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 21/33] xen/passthrough: Introduce iommu_construct Julien Grall
2015-03-20 10:53   ` Jan Beulich
2015-03-31 11:13   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 22/33] xen/passthrough: arm: release the DT devices assigned to a guest earlier Julien Grall
2015-03-31 11:16   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 23/33] xen/passthrough: iommu_deassign_device_dt: By default reassign device to nobody Julien Grall
2015-03-31 11:16   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 24/33] xen/iommu: arm: Wire iommu DOMCTL for ARM Julien Grall
2015-03-19 19:29 ` [PATCH v4 25/33] xen/xsm: Add helpers to check permission for device tree passthrough Julien Grall
2015-03-31 11:17   ` Ian Campbell
2015-03-31 17:12   ` Daniel De Graaf
2015-03-31 17:14     ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 26/33] xen/passthrough: Extend XEN_DOMCTL_*assign_device to support DT device Julien Grall
2015-03-20 11:01   ` Jan Beulich
2015-03-31 11:24   ` Ian Campbell
2015-03-31 12:30     ` Julien Grall
2015-03-31 13:16       ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 27/33] tools/libxl: Create a per-arch function to map IRQ to a domain Julien Grall
2015-03-31 11:26   ` Ian Campbell
2015-03-31 12:33     ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 28/33] tools/libxl: Check if fdt_{first, next}_subnode are present in libfdt Julien Grall
2015-03-19 19:42   ` Julien Grall
2015-03-31 11:35   ` Ian Campbell
2015-03-31 12:46     ` Julien Grall
2015-03-31 13:18       ` Ian Campbell
2015-04-07 17:15         ` Julien Grall
2015-04-09 12:16         ` Ian Jackson
2015-04-09 13:59           ` Julien Grall
2015-04-14 11:40           ` Ian Campbell
2015-04-14 13:34             ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 29/33] tools/(lib)xl: Add partial device tree support for ARM Julien Grall
2015-03-31 11:41   ` Ian Campbell
2015-03-31 12:55     ` Julien Grall
2015-03-31 13:19       ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 30/33] tools/libxl: arm: Use an higher value for the GIC phandle Julien Grall
2015-03-31 11:43   ` Ian Campbell
2015-04-09 12:36     ` Julien Grall
2015-03-19 19:29 ` [PATCH v4 31/33] libxl: Add support for non-PCI passthrough Julien Grall
2015-03-31 11:49   ` Ian Campbell
2015-03-31 13:00     ` Julien Grall
2015-03-31 13:20       ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 32/33] xl: Add new option dtdev Julien Grall
2015-03-31 11:50   ` Ian Campbell
2015-03-19 19:29 ` [PATCH v4 33/33] docs/misc: arm: Add documentation about non-PCI passthrough Julien Grall
2015-03-31 11:55   ` Ian Campbell
2015-03-31 13:03     ` Julien Grall
2015-03-31 13:21       ` Ian Campbell
2015-04-09 13:36         ` Julien Grall
2015-03-20  1:22 ` [PATCH v4 00/33] xen/arm: Add support for " Edgar E. Iglesias
2015-03-20 17:34   ` Julien Grall
2015-03-31 11:57 ` Ian Campbell
2015-03-31 13:07   ` Julien Grall
2015-03-31 13:22     ` Ian Campbell
2015-04-01 14:21       ` Julien Grall

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=551AA000.6090603@citrix.com \
    --to=andrew.cooper3@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.