Marek Marczykowski
2013-May-08 03:47 UTC
[PATCH] libxl: do not call exit() in libxl_device_vtpm_list
Signal error with NULL return value, do not terminate the whole process. Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com> --- tools/libxl/libxl.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 03fd35a..5b9a3df 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -1860,11 +1860,12 @@ libxl_device_vtpm *libxl_device_vtpm_list(libxl_ctx *ctx, uint32_t domid, int *n vtpm->backend_domid = atoi(tmp); tmp = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/uuid", be_path)); - if(tmp) { - if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { - LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); - exit(1); - } + if (tmp) { + if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { + LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); + free(vtpms); + return NULL; + } } } } -- 1.8.1.4
Jim Fehlig
2013-May-08 05:28 UTC
Re: [PATCH] libxl: do not call exit() in libxl_device_vtpm_list
Marek Marczykowski wrote:> Signal error with NULL return value, do not terminate the whole process. > > Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com> > --- > tools/libxl/libxl.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index 03fd35a..5b9a3df 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -1860,11 +1860,12 @@ libxl_device_vtpm *libxl_device_vtpm_list(libxl_ctx *ctx, uint32_t domid, int *n > vtpm->backend_domid = atoi(tmp); > > tmp = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/uuid", be_path)); > - if(tmp) { > - if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > - LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > - exit(1); > - } >Ouch. libxl shouldn''t be calling exit :).> + if (tmp) { > + if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > + LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > + free(vtpms); > + return NULL; > + } > } > } > } >Reviewed-by: Jim Fehlig <jfehlig@suse.com> Regards, Jim
Ian Campbell
2013-May-08 09:35 UTC
Re: [PATCH] libxl: do not call exit() in libxl_device_vtpm_list
On Wed, 2013-05-08 at 04:47 +0100, Marek Marczykowski wrote:> Signal error with NULL return value, do not terminate the whole process.Ouch! Good catch.> Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com> > --- > tools/libxl/libxl.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index 03fd35a..5b9a3df 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -1860,11 +1860,12 @@ libxl_device_vtpm *libxl_device_vtpm_list(libxl_ctx *ctx, uint32_t domid, int *n > vtpm->backend_domid = atoi(tmp); > > tmp = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/uuid", be_path)); > - if(tmp) { > - if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > - LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > - exit(1); > - } > + if (tmp) { > + if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > + LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > + free(vtpms);I think this also needs to libxl_device_vtpm_dispose any prior entries in the array. libxl_device_vtpm_list_free() should be helpful here.> + return NULL; > + } > } > } > }
Ian Campbell
2013-Jul-04 10:41 UTC
Re: [PATCH] libxl: do not call exit() in libxl_device_vtpm_list
On Wed, 2013-05-08 at 10:35 +0100, Ian Campbell wrote:> On Wed, 2013-05-08 at 04:47 +0100, Marek Marczykowski wrote: > > Signal error with NULL return value, do not terminate the whole process. > > Ouch! Good catch. > > > Signed-off-by: Marek Marczykowski <marmarek@invisiblethingslab.com>I''ve applied this to staging. Is anyone able to take care of the memory leak I mentioned below? I think this should go into 4.3.1 if not 4.3.0.> > --- > > tools/libxl/libxl.c | 11 ++++++----- > > 1 file changed, 6 insertions(+), 5 deletions(-) > > > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > > index 03fd35a..5b9a3df 100644 > > --- a/tools/libxl/libxl.c > > +++ b/tools/libxl/libxl.c > > @@ -1860,11 +1860,12 @@ libxl_device_vtpm *libxl_device_vtpm_list(libxl_ctx *ctx, uint32_t domid, int *n > > vtpm->backend_domid = atoi(tmp); > > > > tmp = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/uuid", be_path)); > > - if(tmp) { > > - if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > > - LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > > - exit(1); > > - } > > + if (tmp) { > > + if(libxl_uuid_from_string(&(vtpm->uuid), tmp)) { > > + LOG(ERROR, "%s/uuid is a malformed uuid?? (%s) Probably a bug!!\n", be_path, tmp); > > + free(vtpms); > > I think this also needs to libxl_device_vtpm_dispose any prior entries > in the array. libxl_device_vtpm_list_free() should be helpful here. > > > + return NULL; > > + } > > } > > } > > } > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel