|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: fix issues in 38cd0664
On Tue, Oct 04, 2016 at 10:48:57AM +0100, Ian Jackson wrote:
> Wei Liu writes ("[PATCH] libxl: fix issues in 38cd0664"):
> > A few issues were introduced in 38cd0664 ("libxl/arm: Add the size of
> > ACPI tables to maxmem"):
> >
> > 1. d_config was not properly initialised and disposed of.
> > 2. using libxl_retrieve_domain_configuration caused thread to
> > deadlock itself.
> >
> > Fix those issues by:
> >
> > 1. properly initialise and dispose of d_config.
> > 2. switch to use libxl__get_domain_configuration.
> >
> > Note that in theory we can refactor libxl_retrieve_domain_configuration
> > a bit to get a function without locking, but up until the calculation of
> > extra memory only relies on static configuration, hence we use the
> > stored configuration only.
>
> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
>
> I think we should probably do the patch below, too. I've checked that
> it doesn't break the build (after your patch) :-).
>
> Thanks,
> Ian.
>
> From abe530fb827edb22ed3db51d56f07b88cf8f0e17 Mon Sep 17 00:00:00 2001
> From: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Date: Tue, 4 Oct 2016 10:19:36 +0100
> Subject: [PATCH] libxl: Mark libxl_retrieve_domain_configuration as for
> external callers only
>
> This function takes the userdata lock. Incautious use inside libxl
> can result in nested acquisition of that lock, and deadlock.
>
> There is no good reason to use this function inside libxl, but it is a
> superficially attractive option. Make future regressions easier to
> spot by marking the function for external use only.
>
> Similar arguments apply for the application-facing userdata accessors,
> so do those too.
>
> Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
I thought about doing the same thing yesterday.
I will commit both patches soon.
> ---
> tools/libxl/libxl.h | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index 969a089..acbf476 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -1352,7 +1352,8 @@ void libxl_domain_config_dispose(libxl_domain_config
> *d_config);
> * works with DomU.
> */
> int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
> - libxl_domain_config *d_config);
> + libxl_domain_config *d_config)
> + LIBXL_EXTERNAL_CALLERS_ONLY;
>
> int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
> int flags, /* LIBXL_SUSPEND_* */
> @@ -1945,12 +1946,14 @@ void libxl_cpuid_set(libxl_ctx *ctx, uint32_t domid,
> */
> int libxl_userdata_store(libxl_ctx *ctx, uint32_t domid,
> const char *userdata_userid,
> - const uint8_t *data, int datalen);
> + const uint8_t *data, int datalen)
> + LIBXL_EXTERNAL_CALLERS_ONLY;
> /* If datalen==0, data is not used and the user data for
> * that domain and userdata_userid is deleted. */
> int libxl_userdata_retrieve(libxl_ctx *ctx, uint32_t domid,
> const char *userdata_userid,
> - uint8_t **data_r, int *datalen_r);
> + uint8_t **data_r, int *datalen_r)
> + LIBXL_EXTERNAL_CALLERS_ONLY;
> /* On successful return, *data_r is from malloc.
> * If there is no data for that domain and userdata_userid,
> * *data_r and *datalen_r will be set to 0.
> --
> 2.1.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |