From 95a61f16dc593ce3091ce3c5ea5ceeb14e7ea86a Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 28 May 2014 20:44:24 +0200 Subject: [PATCH] libcontainer: Don't create a device node on /dev/console to bind mount on There is no need for this, the device node by itself doesn't work, since its not on a devpts fs, and we can just a regular file to bind mount over. Docker-DCO-1.1-Signed-off-by: Alexander Larsson (github: alexlarsson) --- libcontainer/console/console.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/libcontainer/console/console.go b/libcontainer/console/console.go index 5f06aea..79a4804 100644 --- a/libcontainer/console/console.go +++ b/libcontainer/console/console.go @@ -17,29 +17,26 @@ func Setup(rootfs, consolePath, mountLabel string) error { oldMask := system.Umask(0000) defer system.Umask(oldMask) - stat, err := os.Stat(consolePath) - if err != nil { - return fmt.Errorf("stat console %s %s", consolePath, err) - } - var ( - st = stat.Sys().(*syscall.Stat_t) - dest = filepath.Join(rootfs, "dev/console") - ) - if err := os.Remove(dest); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("remove %s %s", dest, err) - } if err := os.Chmod(consolePath, 0600); err != nil { return err } if err := os.Chown(consolePath, 0, 0); err != nil { return err } - if err := system.Mknod(dest, (st.Mode&^07777)|0600, int(st.Rdev)); err != nil { - return fmt.Errorf("mknod %s %s", dest, err) - } if err := label.SetFileLabel(consolePath, mountLabel); err != nil { - return fmt.Errorf("set file label %s %s", dest, err) + return fmt.Errorf("set file label %s %s", consolePath, err) } + + dest := filepath.Join(rootfs, "dev/console") + + f, err := os.Create(dest) + if err != nil && !os.IsExist(err) { + return fmt.Errorf("create %s %s", dest, err) + } + if f != nil { + f.Close() + } + if err := system.Mount(consolePath, dest, "bind", syscall.MS_BIND, ""); err != nil { return fmt.Errorf("bind %s to %s %s", consolePath, dest, err) }