Skip to content

Commit 2bbc786

Browse files
authored
Merge pull request from GHSA-2mm7-x5h6-5pvq
oci: inheritable capability set should be empty
2 parents 6b9b445 + 0d9a37d commit 2bbc786

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

daemon/exec_linux.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@ func (daemon *Daemon) execSetPlatformOpt(c *container.Container, ec *exec.Config
1919
}
2020
}
2121
if ec.Privileged {
22-
if p.Capabilities == nil {
23-
p.Capabilities = &specs.LinuxCapabilities{}
22+
p.Capabilities = &specs.LinuxCapabilities{
23+
Bounding: caps.GetAllCapabilities(),
24+
Permitted: caps.GetAllCapabilities(),
25+
Effective: caps.GetAllCapabilities(),
2426
}
25-
p.Capabilities.Bounding = caps.GetAllCapabilities()
26-
p.Capabilities.Permitted = p.Capabilities.Bounding
27-
p.Capabilities.Inheritable = p.Capabilities.Bounding
28-
p.Capabilities.Effective = p.Capabilities.Bounding
2927
}
3028
if apparmor.HostSupports() {
3129
var appArmorProfile string

oci/defaults.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ func DefaultLinuxSpec() specs.Spec {
3636
Version: specs.Version,
3737
Process: &specs.Process{
3838
Capabilities: &specs.LinuxCapabilities{
39-
Bounding: caps.DefaultCapabilities(),
40-
Permitted: caps.DefaultCapabilities(),
41-
Inheritable: caps.DefaultCapabilities(),
42-
Effective: caps.DefaultCapabilities(),
39+
Bounding: caps.DefaultCapabilities(),
40+
Permitted: caps.DefaultCapabilities(),
41+
Effective: caps.DefaultCapabilities(),
4342
},
4443
},
4544
Root: &specs.Root{},

oci/oci.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,21 @@ import (
1717
var deviceCgroupRuleRegex = regexp.MustCompile("^([acb]) ([0-9]+|\\*):([0-9]+|\\*) ([rwm]{1,3})$")
1818

1919
// SetCapabilities sets the provided capabilities on the spec
20-
// All capabilities are added if privileged is true
20+
// All capabilities are added if privileged is true.
2121
func SetCapabilities(s *specs.Spec, caplist []string) error {
22-
s.Process.Capabilities.Effective = caplist
23-
s.Process.Capabilities.Bounding = caplist
24-
s.Process.Capabilities.Permitted = caplist
25-
s.Process.Capabilities.Inheritable = caplist
2622
// setUser has already been executed here
27-
// if non root drop capabilities in the way execve does
28-
if s.Process.User.UID != 0 {
29-
s.Process.Capabilities.Effective = []string{}
30-
s.Process.Capabilities.Permitted = []string{}
23+
if s.Process.User.UID == 0 {
24+
s.Process.Capabilities = &specs.LinuxCapabilities{
25+
Effective: caplist,
26+
Bounding: caplist,
27+
Permitted: caplist,
28+
}
29+
} else {
30+
// Do not set Effective and Permitted capabilities for non-root users,
31+
// to match what execve does.
32+
s.Process.Capabilities = &specs.LinuxCapabilities{
33+
Bounding: caplist,
34+
}
3135
}
3236
return nil
3337
}

0 commit comments

Comments
 (0)