Browse code

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 <alexl@redhat.com> (github: alexlarsson)

Alexander Larsson authored on 2014/05/29 03:44:24
Showing 1 changed files
... ...
@@ -17,29 +17,26 @@ func Setup(rootfs, consolePath, mountLabel string) error {
17 17
 	oldMask := system.Umask(0000)
18 18
 	defer system.Umask(oldMask)
19 19
 
20
-	stat, err := os.Stat(consolePath)
21
-	if err != nil {
22
-		return fmt.Errorf("stat console %s %s", consolePath, err)
23
-	}
24
-	var (
25
-		st   = stat.Sys().(*syscall.Stat_t)
26
-		dest = filepath.Join(rootfs, "dev/console")
27
-	)
28
-	if err := os.Remove(dest); err != nil && !os.IsNotExist(err) {
29
-		return fmt.Errorf("remove %s %s", dest, err)
30
-	}
31 20
 	if err := os.Chmod(consolePath, 0600); err != nil {
32 21
 		return err
33 22
 	}
34 23
 	if err := os.Chown(consolePath, 0, 0); err != nil {
35 24
 		return err
36 25
 	}
37
-	if err := system.Mknod(dest, (st.Mode&^07777)|0600, int(st.Rdev)); err != nil {
38
-		return fmt.Errorf("mknod %s %s", dest, err)
39
-	}
40 26
 	if err := label.SetFileLabel(consolePath, mountLabel); err != nil {
41
-		return fmt.Errorf("set file label %s %s", dest, err)
27
+		return fmt.Errorf("set file label %s %s", consolePath, err)
42 28
 	}
29
+
30
+	dest := filepath.Join(rootfs, "dev/console")
31
+
32
+	f, err := os.Create(dest)
33
+	if err != nil && !os.IsExist(err) {
34
+		return fmt.Errorf("create %s %s", dest, err)
35
+	}
36
+	if f != nil {
37
+		f.Close()
38
+	}
39
+
43 40
 	if err := system.Mount(consolePath, dest, "bind", syscall.MS_BIND, ""); err != nil {
44 41
 		return fmt.Errorf("bind %s to %s %s", consolePath, dest, err)
45 42
 	}