[libvirt] [PATCH 1/2] Fix occasional container creation failure due to misuse of grantpt

Eric Blake eblake at redhat.com
Thu Oct 13 15:47:09 UTC 2011


On 10/12/2011 08:31 PM, Serge E. Hallyn wrote:
> glibc's grantpt and ptsname cannot be used on a fd for a pty not in
> /dev/pts.  The lxc controller tries to do just that.  So if you try to
> start a container on a system where /dev/pts/0 is not available, it
> will fail.  You can make this happen by opening a terminal on
> /dev/pts/0, and doing 'sleep 2h&  disown; exit'.  To fix this, I call
> the virFileOpenTtyAt() from a forked task in a new mount ns, and first
> mount the container's /dev/pts onto /dev/pts.  (Then the opened fd must
> be passed back to the lxc driver).  Another solution would be to just
> do it all by hand without grantpt and ptsname.
>
> Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/863629
>
> Signed-off-by: Serge Hallyn<serge.hallyn at canonical.com>
> ---
>   src/lxc/lxc_controller.c |  117 ++++++++++++++++++++++++++++++++++++++++++++--
>   1 files changed, 112 insertions(+), 5 deletions(-)
>
> diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
> index 51488e7..1a56e0c 100644
> --- a/src/lxc/lxc_controller.c
> +++ b/src/lxc/lxc_controller.c
> @@ -780,6 +780,113 @@ static int lxcSetPersonality(virDomainDefPtr def)
>   # define MS_SLAVE              (1<<19)
>   #endif
>
> +static int send_pty(int sock, int *pty)
> +{
> +    struct iovec vector;
> +    struct msghdr msg;
> +    struct cmsghdr * cmsg;
> +    int ret;
> +

Yuck.  Why not just use gnulib's sendfd/recvfd interfaces, and greatly 
shrink the size of this patch?  We're already using those functions 
elsewhere, for much more compact fd passing.
> +    if (VIR_ALLOC_N(*path, PATH_MAX)<  0) {
> +        virReportSystemError(errno, "%s",
> +                _("Failed to allocate space for ptyname"));
> +        return -ENOMEM;
> +    }
> +    //snprintf(*path, PATH_MAX, "%s/0", devpts);

Also, looks like you left some debug stuff behind.

Have you filed a bug against glibc's grantpt?

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list