[libvirt] [PATCH 02/17] nwfilter: Fix possible corruption on failure path during LoadConfig
Michal Privoznik
mprivozn at redhat.com
Thu Jul 13 14:41:27 UTC 2017
On 06/02/2017 12:25 PM, John Ferlan wrote:
> If the virNWFilterSaveConfig in virNWFilterObjListLoadConfig, then jumping
s/,/ fails,/
> to the error label would free the @def owned by the object, but the object
> is still on the list.
>
> Fix this by following proper procedure to clear @def and create a new
> variable @objdef to handle the object's def after successful assignment.
>
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> src/conf/virnwfilterobj.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c
> index 0027d45..3fb6046 100644
> --- a/src/conf/virnwfilterobj.c
> +++ b/src/conf/virnwfilterobj.c
> @@ -485,6 +485,7 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfilters,
> {
> virNWFilterDefPtr def = NULL;
> virNWFilterObjPtr obj;
> + virNWFilterDefPtr objdef;
> char *configFile = NULL;
>
> if (!(configFile = virFileBuildPath(configDir, name, ".xml")))
> @@ -503,10 +504,12 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfilters,
>
> if (!(obj = virNWFilterObjListAssignDef(nwfilters, def)))
> goto error;
> + def = NULL;
> + objdef = obj->def;
>
> /* We generated a UUID, make it permanent by saving the config to disk */
> - if (!def->uuid_specified &&
> - virNWFilterSaveConfig(configDir, def) < 0)
> + if (!objdef->uuid_specified &&
> + virNWFilterSaveConfig(configDir, objdef) < 0)
> goto error;
This @objdef variable looks redundant to me. Can't we access obj->def
directly? Esp. since you're introducing a variable just for a two times
use. Then again, we often use obj->def->... when it comes to domain
objects, why not here?
ACK if you drop the @objdef variable.
Michal
More information about the libvir-list
mailing list