Creates the device node in the rootfs of the container.
(rootFd *os.File, node *devices.Device, bind bool)
| 986 | |
| 987 | // Creates the device node in the rootfs of the container. |
| 988 | func createDeviceNode(rootFd *os.File, node *devices.Device, bind bool) error { |
| 989 | if node.Path == "" { |
| 990 | // The node only exists for cgroup reasons, ignore it here. |
| 991 | return nil |
| 992 | } |
| 993 | destDir, destName, err := pathrs.MkdirAllParentInRoot(rootFd, node.Path, 0o755) |
| 994 | if err != nil { |
| 995 | return fmt.Errorf("mkdir parent of device inode %q: %w", node.Path, err) |
| 996 | } |
| 997 | defer destDir.Close() |
| 998 | |
| 999 | if bind { |
| 1000 | return bindMountDeviceNode(destDir, destName, node) |
| 1001 | } |
| 1002 | if err := mknodDevice(destDir, destName, node); err != nil { |
| 1003 | if errors.Is(err, os.ErrExist) { |
| 1004 | return nil |
| 1005 | } else if errors.Is(err, os.ErrPermission) { |
| 1006 | return bindMountDeviceNode(destDir, destName, node) |
| 1007 | } |
| 1008 | return err |
| 1009 | } |
| 1010 | return nil |
| 1011 | } |
| 1012 | |
| 1013 | func mknodDevice(destDir *os.File, destName string, node *devices.Device) error { |
| 1014 | fileMode := node.FileMode |
no test coverage detected
searching dependent graphs…