diff options
author | Marek Marczykowski <marmarek@mimuw.edu.pl> | 2011-06-27 17:24:50 +0100 |
---|---|---|
committer | Marek Marczykowski <marmarek@mimuw.edu.pl> | 2011-06-27 17:24:50 +0100 |
commit | 21e104aab3d138706d3a9e674ff6ad296419bf61 (patch) | |
tree | 2f825b59fbb03c3fc6d8b7d76aaaeb929ea60853 /tools/libxl/libxl_utils.c | |
parent | 797290bf9d96b5c6a6a7b0d6a1aaf23d8d35acb1 (diff) | |
download | xen-21e104aab3d138706d3a9e674ff6ad296419bf61.tar.gz xen-21e104aab3d138706d3a9e674ff6ad296419bf61.tar.bz2 xen-21e104aab3d138706d3a9e674ff6ad296419bf61.zip |
libxl: Allocate memory for strings in libxl_device_disk
Memory for strings in libxl_device_disk must be allocated from outside of
libxl__gc to not be freed at the end of function (by libxl__free_all).
Fixes xl block-detach
Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_utils.c')
-rw-r--r-- | tools/libxl/libxl_utils.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 889d02cb7a..aad8e5a4a8 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -551,10 +551,12 @@ int libxl_devid_to_device_disk(libxl_ctx *ctx, uint32_t domid, goto out; disk->backend_domid = strtoul(val, NULL, 10); be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", diskpath)); - disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/params", be_path)); + disk->pdev_path = xs_read(ctx->xsh, XBT_NULL, + libxl__sprintf(&gc, "%s/params", be_path), NULL); val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", be_path)); libxl_string_to_backend(ctx, val, &(disk->backend)); - disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", be_path)); + disk->vdev = xs_read(ctx->xsh, XBT_NULL, + libxl__sprintf(&gc, "%s/dev", be_path), NULL); val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", be_path)); disk->removable = !strcmp(val, "1"); val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode", be_path)); |