[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH for-4.14] tools/libxc: Drop config_transformed parameter from xc_cpuid_set()
> -----Original Message----- > From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Sent: 12 June 2020 11:55 > To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx> > Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; Ian Jackson > <Ian.Jackson@xxxxxxxxxx>; Wei Liu > <wl@xxxxxxx>; Paul Durrant <paul@xxxxxxx> > Subject: [PATCH for-4.14] tools/libxc: Drop config_transformed parameter from > xc_cpuid_set() > > libxl is now the sole caller of xc_cpuid_set(). The config_transformed output > is ignored, and this patch trivially highlights the resulting memory leak. > > "transformed" config is now properly forwarded on migrate as part of the > general VM state, so delete the transformation logic completely, rather than > trying to adjust just libxl to avoid leaking memory. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Paul Durrant <paul@xxxxxxx> Release-acked-by: Paul Durrant <paul@xxxxxxx> > --- > CC: Ian Jackson <Ian.Jackson@xxxxxxxxxx> > CC: Wei Liu <wl@xxxxxxx> > CC: Paul Durrant <paul@xxxxxxx> > > For 4.14 for hopefully obvious reasons. > > Ian: for backport to 4.13 and earlier, there are a number of options. The > reasoning we used to delete the other callers of xc_cpuid_set() is still > valid, but probably not backport material. > > OTOH, moding libxl_cpuid_set() (as it was back then) to loop over cpuid_res[] > and free them all should work. > --- > tools/libxc/include/xenctrl.h | 3 +-- > tools/libxc/xc_cpuid_x86.c | 25 +------------------------ > tools/libxl/libxl_cpuid.c | 3 +-- > 3 files changed, 3 insertions(+), 28 deletions(-) > > diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h > index f9e17ae424..113ddd935d 100644 > --- a/tools/libxc/include/xenctrl.h > +++ b/tools/libxc/include/xenctrl.h > @@ -1795,8 +1795,7 @@ int xc_domain_debug_control(xc_interface *xch, > int xc_cpuid_set(xc_interface *xch, > uint32_t domid, > const unsigned int *input, > - const char **config, > - char **config_transformed); > + const char **config); > > /* > * Make adjustments to the CPUID settings for a domain. > diff --git a/tools/libxc/xc_cpuid_x86.c b/tools/libxc/xc_cpuid_x86.c > index 89d2ecdad2..b42edd6457 100644 > --- a/tools/libxc/xc_cpuid_x86.c > +++ b/tools/libxc/xc_cpuid_x86.c > @@ -279,7 +279,7 @@ int xc_set_domain_cpu_policy(xc_interface *xch, uint32_t > domid, > */ > int xc_cpuid_set( > xc_interface *xch, uint32_t domid, const unsigned int *input, > - const char **config, char **config_transformed) > + const char **config) > { > int rc; > unsigned int i, j, regs[4] = {}, polregs[4] = {}; > @@ -288,9 +288,6 @@ int xc_cpuid_set( > unsigned int nr_leaves, policy_leaves, nr_msrs; > uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1; > > - for ( i = 0; i < 4; ++i ) > - config_transformed[i] = NULL; > - > if ( xc_domain_getinfo(xch, domid, 1, &di) != 1 || > di.domid != domid ) > { > @@ -365,13 +362,6 @@ int xc_cpuid_set( > continue; > } > > - config_transformed[i] = calloc(33, 1); /* 32 bits, NUL terminator. */ > - if ( config_transformed[i] == NULL ) > - { > - rc = -ENOMEM; > - goto fail; > - } > - > /* > * Notes for following this algorithm: > * > @@ -399,11 +389,6 @@ int xc_cpuid_set( > set_feature(31 - j, regs[i]); > else > clear_feature(31 - j, regs[i]); > - > - config_transformed[i][j] = config[i][j]; > - /* All non 0/1 values get overwritten. */ > - if ( (config[i][j] & ~1) != '0' ) > - config_transformed[i][j] = '0' + val; > } > } > > @@ -421,16 +406,8 @@ int xc_cpuid_set( > } > > /* Success! */ > - goto out; > > fail: > - for ( i = 0; i < 4; i++ ) > - { > - free(config_transformed[i]); > - config_transformed[i] = NULL; > - } > - > - out: > free(leaves); > > return rc; > diff --git a/tools/libxl/libxl_cpuid.c b/tools/libxl/libxl_cpuid.c > index 4e4852ddeb..796ec4f2d9 100644 > --- a/tools/libxl/libxl_cpuid.c > +++ b/tools/libxl/libxl_cpuid.c > @@ -421,7 +421,6 @@ void libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, > { > libxl_cpuid_policy_list cpuid = info->cpuid; > int i; > - char *cpuid_res[4]; > bool pae = true; > > /* > @@ -444,7 +443,7 @@ void libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, > > for (i = 0; cpuid[i].input[0] != XEN_CPUID_INPUT_UNUSED; i++) > xc_cpuid_set(ctx->xch, domid, cpuid[i].input, > - (const char**)(cpuid[i].policy), cpuid_res); > + (const char**)cpuid[i].policy); > } > > static const char *input_names[2] = { "leaf", "subleaf" }; > -- > 2.11.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |