[libvirt] [PATCH] Revert "vircgroup: cleanup controllers not managed by systemd on error"
John Ferlan
jferlan at redhat.com
Thu Sep 27 14:27:48 UTC 2018
On 9/27/18 10:13 AM, Pavel Hrdina wrote:
> This reverts commit 1602aa28f820ada66f707cef3e536e8572fbda1e.
>
> There is no need to call virCgroupRemove() nor virCgroupFree() if
> virCgroupEnableMissingControllers() fails because it will not modify
> 'group' at all. The cleanup is done in virCgroupMakeGroup().
>
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> src/util/vircgroup.c | 25 ++++++++++---------------
> 1 file changed, 10 insertions(+), 15 deletions(-)
>
For this patch,
Reviewed-by: John Ferlan <jferlan at redhat.com>
However, of course this tickle's Coverity (that's what happens when
someone makes a change in code).
Anyway, it seems calling virCgroupSetOwner with a NULL cgroup as could
happen in virLXCCgroupCreate if virCgroupNewMachine returns 0 and cgroup
== NULL, will cause a problem.
Yes, this existing and no I'm not knowledgeable (nor is Coverity for
that matter) to know if having def->idmap.uidmap is "related".
John
It's like an onion, peel one layer and we find something else.
> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> index f90906e4ad..548c873da8 100644
> --- a/src/util/vircgroup.c
> +++ b/src/util/vircgroup.c
> @@ -1055,7 +1055,6 @@ virCgroupNewMachineSystemd(const char *name,
> int rv;
> virCgroupPtr init;
> VIR_AUTOFREE(char *) path = NULL;
> - virErrorPtr saved = NULL;
>
> VIR_DEBUG("Trying to setup machine '%s' via systemd", name);
> if ((rv = virSystemdCreateMachine(name,
> @@ -1088,24 +1087,20 @@ virCgroupNewMachineSystemd(const char *name,
>
> if (virCgroupEnableMissingControllers(path, pidleader,
> controllers, group) < 0) {
> - goto error;
> + return -1;
> }
>
> - if (virCgroupAddProcess(*group, pidleader) < 0)
> - goto error;
> + if (virCgroupAddProcess(*group, pidleader) < 0) {
> + virErrorPtr saved = virSaveLastError();
> + virCgroupRemove(*group);
> + virCgroupFree(group);
> + if (saved) {
> + virSetError(saved);
> + virFreeError(saved);
> + }
> + }
>
> return 0;
> -
> - error:
> - saved = virSaveLastError();
> - virCgroupRemove(*group);
> - virCgroupFree(group);
> - if (saved) {
> - virSetError(saved);
> - virFreeError(saved);
> - }
> -
> - return -1;
> }
>
>
>
More information about the libvir-list
mailing list