@@ -479,12 +479,15 @@ func CreateCgroupConfig(opts *CreateOpts, defaultDevs []*devices.Device) (*confi
479479 if r != nil {
480480 for i , d := range spec .Linux .Resources .Devices {
481481 var (
482- t = "a"
482+ dt = devices . WildcardDevice
483483 major = int64 (- 1 )
484484 minor = int64 (- 1 )
485485 )
486486 if d .Type != "" {
487- t = d .Type
487+ dt = devices .Type (d .Type )
488+ if ! dt .CanCgroup () {
489+ return nil , fmt .Errorf ("invalid cgroup device type %q" , d .Type )
490+ }
488491 }
489492 if d .Major != nil {
490493 major = * d .Major
@@ -495,10 +498,6 @@ func CreateCgroupConfig(opts *CreateOpts, defaultDevs []*devices.Device) (*confi
495498 if d .Access == "" {
496499 return nil , fmt .Errorf ("device access at %d field cannot be empty" , i )
497500 }
498- dt , err := stringToCgroupDeviceRune (t )
499- if err != nil {
500- return nil , err
501- }
502501 c .Resources .Devices = append (c .Resources .Devices , & devices.Rule {
503502 Type : dt ,
504503 Major : major ,
@@ -635,20 +634,7 @@ func CreateCgroupConfig(opts *CreateOpts, defaultDevs []*devices.Device) (*confi
635634 return c , nil
636635}
637636
638- func stringToCgroupDeviceRune (s string ) (devices.Type , error ) {
639- switch s {
640- case "a" :
641- return devices .WildcardDevice , nil
642- case "b" :
643- return devices .BlockDevice , nil
644- case "c" :
645- return devices .CharDevice , nil
646- default :
647- return 0 , fmt .Errorf ("invalid cgroup device type %q" , s )
648- }
649- }
650-
651- func stringToDeviceRune (s string ) (devices.Type , error ) {
637+ func stringToDeviceType (s string ) (devices.Type , error ) {
652638 switch s {
653639 case "p" :
654640 return devices .FifoDevice , nil
@@ -657,7 +643,7 @@ func stringToDeviceRune(s string) (devices.Type, error) {
657643 case "b" :
658644 return devices .BlockDevice , nil
659645 default :
660- return 0 , fmt .Errorf ("invalid device type %q" , s )
646+ return "" , fmt .Errorf ("invalid device type %q" , s )
661647 }
662648}
663649
@@ -693,7 +679,7 @@ next:
693679 if d .GID != nil {
694680 gid = * d .GID
695681 }
696- dt , err := stringToDeviceRune (d .Type )
682+ dt , err := stringToDeviceType (d .Type )
697683 if err != nil {
698684 return nil , err
699685 }
0 commit comments