aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_bootloader.c
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2012-05-18 13:39:59 +0100
committerIan Campbell <ian.campbell@citrix.com>2012-05-18 13:39:59 +0100
commitdd7c460bad640578381132ca491ca5d427b1ebab (patch)
treea8ef85a2319b7d4f865aa7231c7eb9ce3ae6887b /tools/libxl/libxl_bootloader.c
parent4df8bbb936ece43c63979078b9df6589dbbc58cd (diff)
downloadxen-dd7c460bad640578381132ca491ca5d427b1ebab.tar.gz
xen-dd7c460bad640578381132ca491ca5d427b1ebab.tar.bz2
xen-dd7c460bad640578381132ca491ca5d427b1ebab.zip
libxl: avoid double free of b_info->u.pv.bootloader
b_info is a user provided struct and therefore the content must come from malloc and not gc such that libxl_domain_build_info_dispose can free it. This was broken by 25340:373f24c87dee. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <Ian.Jackson@eu.citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxl/libxl_bootloader.c')
-rw-r--r--tools/libxl/libxl_bootloader.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/libxl/libxl_bootloader.c b/tools/libxl/libxl_bootloader.c
index 81e9eab4cc..ca8409cf98 100644
--- a/tools/libxl/libxl_bootloader.c
+++ b/tools/libxl/libxl_bootloader.c
@@ -356,8 +356,10 @@ void libxl__bootloader_run(libxl__egc *egc, libxl__bootloader_state *bl)
if ( lstat(bootloader, &st) )
LOG(DEBUG, "%s doesn't exist, falling back to config path",
bootloader);
- else
- info->u.pv.bootloader = bootloader;
+ else {
+ free(info->u.pv.bootloader);
+ info->u.pv.bootloader = libxl__strdup(NULL, bootloader);
+ }
}
make_bootloader_args(gc, bl);