diff --git a/security/capabilities/capabilities.go b/security/capabilities/capabilities.go index 7aef5fa67..e01464fdb 100644 --- a/security/capabilities/capabilities.go +++ b/security/capabilities/capabilities.go @@ -1,8 +1,6 @@ package capabilities import ( - "os" - "github.com/syndtr/gocapability/capability" ) @@ -11,7 +9,7 @@ const allCapabilityTypes = capability.CAPS | capability.BOUNDS // DropBoundingSet drops the capability bounding set to those specified in the // container configuration. func DropBoundingSet(capabilities []string) error { - c, err := capability.NewPid(os.Getpid()) + c, err := capability.NewPid(0) if err != nil { return err } @@ -29,7 +27,7 @@ func DropBoundingSet(capabilities []string) error { // DropCapabilities drops all capabilities for the current process except those specified in the container configuration. func DropCapabilities(capList []string) error { - c, err := capability.NewPid(os.Getpid()) + c, err := capability.NewPid(0) if err != nil { return err } diff --git a/update-vendor.sh b/update-vendor.sh index 15bae1858..6f61083cb 100755 --- a/update-vendor.sh +++ b/update-vendor.sh @@ -43,6 +43,6 @@ clone() { clone git github.com/codegangsta/cli 1.1.0 clone git github.com/coreos/go-systemd v2 clone git github.com/godbus/dbus v2 -clone git github.com/syndtr/gocapability 3c85049eae +clone git github.com/syndtr/gocapability 1cf3ac4dc4 # intentionally not vendoring Docker itself... that'd be a circle :) diff --git a/vendor/src/github.com/syndtr/gocapability/capability/capability.go b/vendor/src/github.com/syndtr/gocapability/capability/capability.go index 9df3b4151..c13f4e52a 100644 --- a/vendor/src/github.com/syndtr/gocapability/capability/capability.go +++ b/vendor/src/github.com/syndtr/gocapability/capability/capability.go @@ -60,7 +60,8 @@ type Capabilities interface { Apply(kind CapType) error } -// NewPid create new initialized Capabilities object for given pid. +// NewPid create new initialized Capabilities object for given pid when it +// is nonzero, or for the current pid if pid is 0 func NewPid(pid int) (Capabilities, error) { return newPid(pid) } diff --git a/vendor/src/github.com/syndtr/gocapability/capability/capability_linux.go b/vendor/src/github.com/syndtr/gocapability/capability/capability_linux.go index c5f335f7f..3f658e528 100644 --- a/vendor/src/github.com/syndtr/gocapability/capability/capability_linux.go +++ b/vendor/src/github.com/syndtr/gocapability/capability/capability_linux.go @@ -351,7 +351,15 @@ func (c *capsV3) Load() (err error) { return } - f, err := os.Open(fmt.Sprintf("/proc/%d/status", c.hdr.pid)) + var status_path string + + if c.hdr.pid == 0 { + status_path = fmt.Sprintf("/proc/self/status") + } else { + status_path = fmt.Sprintf("/proc/%d/status", c.hdr.pid) + } + + f, err := os.Open(status_path) if err != nil { return }