diff options
author | "Gianni Tedesco (3P)" <gianni.tedesco@citrix.com> | 2010-08-11 13:09:03 +0100 |
---|---|---|
committer | "Gianni Tedesco (3P)" <gianni.tedesco@citrix.com> | 2010-08-11 13:09:03 +0100 |
commit | ea3d0fee23a5a6dc23565a442b28a590f298c393 (patch) | |
tree | d0ca3eb884df3d5f3f292e11c3343f3876b50604 | |
parent | aa417c220cc8b78b57db45ad6753b1f9998c6e54 (diff) | |
download | xen-ea3d0fee23a5a6dc23565a442b28a590f298c393.tar.gz xen-ea3d0fee23a5a6dc23565a442b28a590f298c393.tar.bz2 xen-ea3d0fee23a5a6dc23565a442b28a590f298c393.zip |
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 <gianni.tedesco@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
-rw-r--r-- | tools/libxl/libxl_internal.h | 1 | ||||
-rw-r--r-- | tools/libxl/libxl_utils.c | 11 |
2 files changed, 10 insertions, 2 deletions
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) { |