On Tue, Jul 14, 2009 at 09:47:44PM -0700, Sukadev Bhattiprolu wrote:
> I am not too familiar with libvirt implementation, but do you think it
> is possible to repro this using ns_exec and fewer/minimal namespaces ?

Just run the program below. 2.6.29 oopses when the child tries to open
/dev/console. Possibly can be stripped down even further but I think
it's fairly minimal anyway.

BTW, I guess the patch should set ERR_PTR(-EIO) or something, instead
of NULL, am I right?

Best regards,
 Grzegorz Nosek

/*------------- cut ------------*/
#define _GNU_SOURCE
#include <fcntl.h>
#include <sched.h>
#include <stdlib.h>
#include <sys/mount.h>
#include <sys/signal.h>
#include <unistd.h>

#include <linux/fs.h>

void dummy(int sig)
{
}

static int child(void *unused)
{
        signal(SIGINT, dummy);
        signal(SIGHUP, dummy);
        pause(); /* cheesy synchronisation to wait for /dev/pts/0 to appear */

        mount("/dev/pts/0", "/dev/console", NULL, MS_BIND, NULL);
        sleep(2);

        open("/dev/console", O_RDWR);
        dup(0);
        dup(0);
        write(1, "Hello world!\n", sizeof("Hello world!\n")-1);
        return 0;
}

int main(void)
{
        pid_t pid;
        char *stack;
        int fd;

        stack = malloc(16384);
        pid = clone(child, stack+16384, CLONE_NEWNS|SIGCHLD, NULL);

        fd = open("/dev/ptmx", O_RDWR|O_NOCTTY|O_NONBLOCK);
        unlockpt(fd);
        grantpt(fd);

        kill(pid, SIGHUP);
        sleep(1);
        return 0; /* exit before child opens /dev/console */
}

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to