Skip to content

Commit 058bfbb

Browse files
committed
Handle non-devices correctly in DeviceFromPath
Before this change, some file type would be treated as char devices (e.g. symlinks). Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
1 parent 07a2f0e commit 058bfbb

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

devices/devices_linux.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ func DeviceFromPath(path, permissions string) (*configs.Device, error) {
2828
if err != nil {
2929
return nil, err
3030
}
31+
32+
var (
33+
devNumber = int(stat.Rdev)
34+
major = Major(devNumber)
35+
)
36+
if major == 0 {
37+
return nil, ErrNotADevice
38+
}
39+
3140
var (
3241
devType rune
3342
mode = stat.Mode
@@ -37,21 +46,16 @@ func DeviceFromPath(path, permissions string) (*configs.Device, error) {
3746
devType = 'b'
3847
case mode&unix.S_IFCHR == unix.S_IFCHR:
3948
devType = 'c'
40-
default:
41-
return nil, ErrNotADevice
4249
}
43-
devNumber := int(stat.Rdev)
44-
uid := stat.Uid
45-
gid := stat.Gid
4650
return &configs.Device{
4751
Type: devType,
4852
Path: path,
49-
Major: Major(devNumber),
53+
Major: major,
5054
Minor: Minor(devNumber),
5155
Permissions: permissions,
5256
FileMode: os.FileMode(mode),
53-
Uid: uid,
54-
Gid: gid,
57+
Uid: stat.Uid,
58+
Gid: stat.Gid,
5559
}, nil
5660
}
5761

0 commit comments

Comments
 (0)