@@ -27,29 +27,29 @@ import (
27
27
"sort"
28
28
"strconv"
29
29
30
- "github.com/opencontainers/runc/libcontainer/configs "
30
+ "github.com/opencontainers/runc/libcontainer/devices "
31
31
32
32
"github.com/pkg/errors"
33
33
)
34
34
35
- // deviceMeta is a DeviceRule without the Allow or Permissions fields, and no
35
+ // deviceMeta is a Rule without the Allow or Permissions fields, and no
36
36
// wildcard-type support. It's effectively the "match" portion of a metadata
37
37
// rule, for the purposes of our emulation.
38
38
type deviceMeta struct {
39
- node configs. DeviceType
39
+ node devices. Type
40
40
major int64
41
41
minor int64
42
42
}
43
43
44
- // deviceRule is effectively the tuple (deviceMeta, DevicePermissions ).
44
+ // deviceRule is effectively the tuple (deviceMeta, Permissions ).
45
45
type deviceRule struct {
46
46
meta deviceMeta
47
- perms configs. DevicePermissions
47
+ perms devices. Permissions
48
48
}
49
49
50
50
// deviceRules is a mapping of device metadata rules to the associated
51
51
// permissions in the ruleset.
52
- type deviceRules map [deviceMeta ]configs. DevicePermissions
52
+ type deviceRules map [deviceMeta ]devices. Permissions
53
53
54
54
func (r deviceRules ) orderedEntries () []deviceRule {
55
55
var rules []deviceRule
@@ -103,17 +103,17 @@ func parseLine(line string) (*deviceRule, error) {
103
103
// TODO: Double-check that the entire file is "a *:* rwm".
104
104
return nil , nil
105
105
case "b" :
106
- rule .meta .node = configs .BlockDevice
106
+ rule .meta .node = devices .BlockDevice
107
107
case "c" :
108
- rule .meta .node = configs .CharDevice
108
+ rule .meta .node = devices .CharDevice
109
109
default :
110
110
// Should never happen!
111
111
return nil , errors .Errorf ("unknown device type %q" , node )
112
112
}
113
113
114
114
// Parse the major number.
115
115
if major == "*" {
116
- rule .meta .major = configs .Wildcard
116
+ rule .meta .major = devices .Wildcard
117
117
} else {
118
118
val , err := strconv .ParseUint (major , 10 , 32 )
119
119
if err != nil {
@@ -124,7 +124,7 @@ func parseLine(line string) (*deviceRule, error) {
124
124
125
125
// Parse the minor number.
126
126
if minor == "*" {
127
- rule .meta .minor = configs .Wildcard
127
+ rule .meta .minor = devices .Wildcard
128
128
} else {
129
129
val , err := strconv .ParseUint (minor , 10 , 32 )
130
130
if err != nil {
@@ -134,7 +134,7 @@ func parseLine(line string) (*deviceRule, error) {
134
134
}
135
135
136
136
// Parse the access permissions.
137
- rule .perms = configs . DevicePermissions (perms )
137
+ rule .perms = devices . Permissions (perms )
138
138
if ! rule .perms .IsValid () || rule .perms .IsEmpty () {
139
139
// Should never happen!
140
140
return nil , errors .Errorf ("parse access mode: contained unknown modes or is empty: %q" , perms )
@@ -144,7 +144,7 @@ func parseLine(line string) (*deviceRule, error) {
144
144
145
145
func (e * Emulator ) addRule (rule deviceRule ) error {
146
146
if e .rules == nil {
147
- e .rules = make (map [deviceMeta ]configs. DevicePermissions )
147
+ e .rules = make (map [deviceMeta ]devices. Permissions )
148
148
}
149
149
150
150
// Merge with any pre-existing permissions.
@@ -169,9 +169,9 @@ func (e *Emulator) rmRule(rule deviceRule) error {
169
169
// to mention it'd be really slow (the kernel side is implemented as a
170
170
// linked-list of exceptions).
171
171
for _ , partialMeta := range []deviceMeta {
172
- {node : rule .meta .node , major : configs .Wildcard , minor : rule .meta .minor },
173
- {node : rule .meta .node , major : rule .meta .major , minor : configs .Wildcard },
174
- {node : rule .meta .node , major : configs .Wildcard , minor : configs .Wildcard },
172
+ {node : rule .meta .node , major : devices .Wildcard , minor : rule .meta .minor },
173
+ {node : rule .meta .node , major : rule .meta .major , minor : devices .Wildcard },
174
+ {node : rule .meta .node , major : devices .Wildcard , minor : devices .Wildcard },
175
175
} {
176
176
// This wildcard rule is equivalent to the requested rule, so skip it.
177
177
if rule .meta == partialMeta {
@@ -202,7 +202,7 @@ func (e *Emulator) rmRule(rule deviceRule) error {
202
202
func (e * Emulator ) allow (rule * deviceRule ) error {
203
203
// This cgroup is configured as a black-list. Reset the entire emulator,
204
204
// and put is into black-list mode.
205
- if rule == nil || rule .meta .node == configs .WildcardDevice {
205
+ if rule == nil || rule .meta .node == devices .WildcardDevice {
206
206
* e = Emulator {
207
207
defaultAllow : true ,
208
208
rules : nil ,
@@ -222,7 +222,7 @@ func (e *Emulator) allow(rule *deviceRule) error {
222
222
func (e * Emulator ) deny (rule * deviceRule ) error {
223
223
// This cgroup is configured as a white-list. Reset the entire emulator,
224
224
// and put is into white-list mode.
225
- if rule == nil || rule .meta .node == configs .WildcardDevice {
225
+ if rule == nil || rule .meta .node == devices .WildcardDevice {
226
226
* e = Emulator {
227
227
defaultAllow : false ,
228
228
rules : nil ,
@@ -239,7 +239,7 @@ func (e *Emulator) deny(rule *deviceRule) error {
239
239
return err
240
240
}
241
241
242
- func (e * Emulator ) Apply (rule configs. DeviceRule ) error {
242
+ func (e * Emulator ) Apply (rule devices. Rule ) error {
243
243
if ! rule .Type .CanCgroup () {
244
244
return errors .Errorf ("cannot add rule [%#v] with non-cgroup type %q" , rule , rule .Type )
245
245
}
@@ -252,7 +252,7 @@ func (e *Emulator) Apply(rule configs.DeviceRule) error {
252
252
},
253
253
perms : rule .Permissions ,
254
254
}
255
- if innerRule .meta .node == configs .WildcardDevice {
255
+ if innerRule .meta .node == devices .WildcardDevice {
256
256
innerRule = nil
257
257
}
258
258
@@ -307,8 +307,8 @@ func EmulatorFromList(list io.Reader) (*Emulator, error) {
307
307
// This function is the sole reason for all of Emulator -- to allow us
308
308
// to figure out how to update a containers' cgroups without causing spurrious
309
309
// device errors (if possible).
310
- func (source * Emulator ) Transition (target * Emulator ) ([]* configs. DeviceRule , error ) {
311
- var transitionRules []* configs. DeviceRule
310
+ func (source * Emulator ) Transition (target * Emulator ) ([]* devices. Rule , error ) {
311
+ var transitionRules []* devices. Rule
312
312
oldRules := source .rules
313
313
314
314
// If the default policy doesn't match, we need to include a "disruptive"
@@ -319,11 +319,11 @@ func (source *Emulator) Transition(target *Emulator) ([]*configs.DeviceRule, err
319
319
// deny rules are in place in a black-list cgroup. Thus if the source is a
320
320
// black-list we also have to include a disruptive rule.
321
321
if source .IsBlacklist () || source .defaultAllow != target .defaultAllow {
322
- transitionRules = append (transitionRules , & configs. DeviceRule {
322
+ transitionRules = append (transitionRules , & devices. Rule {
323
323
Type : 'a' ,
324
324
Major : - 1 ,
325
325
Minor : - 1 ,
326
- Permissions : configs . DevicePermissions ("rwm" ),
326
+ Permissions : devices . Permissions ("rwm" ),
327
327
Allow : target .defaultAllow ,
328
328
})
329
329
// The old rules are only relevant if we aren't starting out with a
@@ -342,7 +342,7 @@ func (source *Emulator) Transition(target *Emulator) ([]*configs.DeviceRule, err
342
342
newPerms := target .rules [meta ]
343
343
droppedPerms := oldPerms .Difference (newPerms )
344
344
if ! droppedPerms .IsEmpty () {
345
- transitionRules = append (transitionRules , & configs. DeviceRule {
345
+ transitionRules = append (transitionRules , & devices. Rule {
346
346
Type : meta .node ,
347
347
Major : meta .major ,
348
348
Minor : meta .minor ,
@@ -360,7 +360,7 @@ func (source *Emulator) Transition(target *Emulator) ([]*configs.DeviceRule, err
360
360
oldPerms := oldRules [meta ]
361
361
gainedPerms := newPerms .Difference (oldPerms )
362
362
if ! gainedPerms .IsEmpty () {
363
- transitionRules = append (transitionRules , & configs. DeviceRule {
363
+ transitionRules = append (transitionRules , & devices. Rule {
364
364
Type : meta .node ,
365
365
Major : meta .major ,
366
366
Minor : meta .minor ,
0 commit comments