From: "Gianni Tedesco (3P)" Date: Wed, 11 Aug 2010 12:09:03 +0000 (+0100) Subject: xl: Fix invalid return of internal ptrs via libxl_poolid_to_name X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11660 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ea3d0fee23a5a6dc23565a442b28a590f298c393;p=xen.git xl: Fix invalid return of internal ptrs via libxl_poolid_to_name libxl_poolid_to_name has in-and-out-of-library callers. In library callers now use _libxl_poolid_to_name() which participates in garbage collection and out-of-library callers are fixed up to free() the domain name. Signed-off-by: Gianni Tedesco Signed-off-by: Stefano Stabellini --- diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 2b2d9635bc..61b3a46266 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -228,6 +228,7 @@ char *libxl_abs_path(libxl_ctx *ctx, char *s, const char *path); #define XL_LOG_ERROR XTL_ERROR char *_libxl_domid_to_name(libxl_ctx *ctx, uint32_t domid); +char *_libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid); #endif diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 7fe10396fc..a0cfcca1c8 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -98,7 +98,14 @@ char *libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid) return "Pool-0"; snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); s = xs_read(ctx->xsh, XBT_NULL, path, &len); - libxl_ptr_add(ctx, s); + return s; +} + +char *_libxl_poolid_to_name(libxl_ctx *ctx, uint32_t poolid) +{ + char *s = libxl_poolid_to_name(ctx, poolid); + if ( s ) + libxl_ptr_add(ctx, s); return s; } @@ -115,7 +122,7 @@ int libxl_name_to_poolid(libxl_ctx *ctx, const char *name, return ERROR_NOMEM; for (i = 0; i < nb_pools; i++) { - poolname = libxl_poolid_to_name(ctx, poolinfo[i].poolid); + poolname = _libxl_poolid_to_name(ctx, poolinfo[i].poolid); if (!poolname) continue; if (strcmp(poolname, name) == 0) {