[libvirt] [RFC PATCH 2/4] util: Fix deadlock across fork()

Daniel P. Berrange berrange at redhat.com
Tue Oct 10 08:52:09 UTC 2017


On Mon, Oct 09, 2017 at 09:14:56PM +0200, Marc Hartmayer wrote:
> This commit fixes the deadlock introduced by commit
> 0980764dee687e8da86dc410c351759867163389. The call getgrouplist() of
> the glibc library isn't safe to be called in between fork and
> exec (see commit 75c125641ac73473ba4b0542524d67a184769c8e).
> 
> Signed-off-by: Marc Hartmayer <mhartmay at linux.vnet.ibm.com>
> Fixes: 0980764dee68 ("util: share code between virExec and virCommandExec")
> Reviewed-by: Bjoern Walk <bwalk at linux.vnet.ibm.com>
> Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
> ---
>  src/lxc/lxc_container.c | 12 +++++++++++-
>  src/util/vircommand.c   | 25 ++++++++++++++-----------
>  src/util/vircommand.h   |  2 +-
>  tests/commandtest.c     | 15 ++++++++++-----
>  4 files changed, 36 insertions(+), 18 deletions(-)
> 
> diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
> index ec6d6a86b0b6..1f220c602b0a 100644
> --- a/src/lxc/lxc_container.c
> +++ b/src/lxc/lxc_container.c
> @@ -2182,6 +2182,8 @@ static int lxcContainerChild(void *data)
>      virDomainFSDefPtr root;
>      virCommandPtr cmd = NULL;
>      int hasReboot;
> +    gid_t *groups = NULL;
> +    int ngroups;
>  
>      if (NULL == vmDef) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -2297,6 +2299,13 @@ static int lxcContainerChild(void *data)
>          goto cleanup;
>      }
>  
> +    /* TODO is it safe to call it here or should this call be moved in
> +     * front of the clone() as otherwise there might be a risk for a
> +     * deadlock */


Yes, clone() is equiv to fork() so it needs to be before clone()

> +    if ((ngroups = virGetGroupList(virCommandGetUID(cmd), virCommandGetGID(cmd),
> +                                   &groups)) < 0)
> +        goto cleanup;
> +
>      ret = 0;
>   cleanup:
>      VIR_FREE(ttyPath);

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list