devices: filter /dev/console out of the node list

Fixed getDeviceNodes() so it won't add /dev/console to the device node
list.

This fixes an issue where containers wouldn't start if
/dev/console is a pts (which is the case when running docker inside
docker), because devpts inodes are special and cannot be created with
mknod: attempting to open the result of doing so will return EIO.

Since later libcontainer would attempt to open the file to mount --bind
over it and fail because of the EIO error, the container wouldn't start
if the /dev/console was a pts, which is the case inside a docker
that was started from a pts.

getDeviceNodes() already filters pts so this change is consistent
with the current behavior.

Signed-off-by: Alejandro Ojeda <alex@x3y.org>
This commit is contained in:
Alejandro Ojeda 2014-10-24 03:18:14 +02:00
parent aab3f6d17f
commit 863a486d81
1 changed files with 11 additions and 6 deletions

View File

@ -115,14 +115,19 @@ func getDeviceNodes(path string) ([]*Device, error) {
} }
} }
device, err := GetDevice(filepath.Join(path, f.Name()), "rwm") switch f.Name() {
if err != nil { case "console":
if err == ErrNotADeviceNode { continue
continue default:
device, err := GetDevice(filepath.Join(path, f.Name()), "rwm")
if err != nil {
if err == ErrNotADeviceNode {
continue
}
return nil, err
} }
return nil, err out = append(out, device)
} }
out = append(out, device)
} }
return out, nil return out, nil