Merge pull request #3713 from crosbymichael/runc-bump2
Bump runc to 1b8a1eeec3f337ab5d94f28980
This commit is contained in:
		| @@ -20,7 +20,7 @@ github.com/gogo/protobuf v1.2.1 | ||||
| github.com/gogo/googleapis v1.2.0 | ||||
| github.com/golang/protobuf v1.2.0 | ||||
| github.com/opencontainers/runtime-spec 29686dbc5559d93fb1ef402eeda3e35c38d75af4 # v1.0.1-59-g29686db | ||||
| github.com/opencontainers/runc 3e425f80a8c931f88e6d94a8c831b9d5aa481657 # v1.0.0-rc8+ CVE-2019-16884 | ||||
| github.com/opencontainers/runc 1b8a1eeec3f337ab5d94f289800b30835f2e5453 # v1.0.0-rc8+ CVE-2019-16884 | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1 | ||||
| github.com/sirupsen/logrus v1.4.1 | ||||
| github.com/urfave/cli v1.22.0 | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/opencontainers/runc/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/opencontainers/runc/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -18,7 +18,7 @@ You can find official releases of `runc` on the [release](https://github.com/ope | ||||
|  | ||||
| ## Security | ||||
|  | ||||
| Reporting process and disclosure communications are outlined in [/org/security](https://github.com/opencontainers/org/blob/master/security/) | ||||
| The reporting process and disclosure communications are outlined in [/org/security](https://github.com/opencontainers/org/blob/master/security/). | ||||
|  | ||||
| ## Building | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/opencontainers/runc/libcontainer/apparmor/apparmor.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,6 +6,8 @@ import ( | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/opencontainers/runc/libcontainer/utils" | ||||
| ) | ||||
|  | ||||
| // IsEnabled returns true if apparmor is enabled for the host. | ||||
| @@ -19,7 +21,7 @@ func IsEnabled() bool { | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func setprocattr(attr, value string) error { | ||||
| func setProcAttr(attr, value string) error { | ||||
| 	// Under AppArmor you can only change your own attr, so use /proc/self/ | ||||
| 	// instead of /proc/<tid>/ like libapparmor does | ||||
| 	path := fmt.Sprintf("/proc/self/attr/%s", attr) | ||||
| @@ -30,6 +32,10 @@ func setprocattr(attr, value string) error { | ||||
| 	} | ||||
| 	defer f.Close() | ||||
|  | ||||
| 	if err := utils.EnsureProcHandle(f); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_, err = fmt.Fprintf(f, "%s", value) | ||||
| 	return err | ||||
| } | ||||
| @@ -37,7 +43,7 @@ func setprocattr(attr, value string) error { | ||||
| // changeOnExec reimplements aa_change_onexec from libapparmor in Go | ||||
| func changeOnExec(name string) error { | ||||
| 	value := "exec " + name | ||||
| 	if err := setprocattr("exec", value); err != nil { | ||||
| 	if err := setProcAttr("exec", value); err != nil { | ||||
| 		return fmt.Errorf("apparmor failed to apply profile: %s", err) | ||||
| 	} | ||||
| 	return nil | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/opencontainers/runc/libcontainer/configs/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/opencontainers/runc/libcontainer/configs/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -44,6 +44,7 @@ const ( | ||||
| 	Trap | ||||
| 	Allow | ||||
| 	Trace | ||||
| 	Log | ||||
| ) | ||||
|  | ||||
| // Operator is a comparison operator to be used when matching syscall arguments in Seccomp | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/opencontainers/runc/libcontainer/seccomp/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -22,6 +22,7 @@ var actions = map[string]configs.Action{ | ||||
| 	"SCMP_ACT_TRAP":  configs.Trap, | ||||
| 	"SCMP_ACT_ALLOW": configs.Allow, | ||||
| 	"SCMP_ACT_TRACE": configs.Trace, | ||||
| 	"SCMP_ACT_LOG":   configs.Log, | ||||
| } | ||||
|  | ||||
| var archs = map[string]string{ | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/opencontainers/runc/libcontainer/seccomp/seccomp_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -19,6 +19,7 @@ var ( | ||||
| 	actTrap  = libseccomp.ActTrap | ||||
| 	actKill  = libseccomp.ActKill | ||||
| 	actTrace = libseccomp.ActTrace.SetReturnCode(int16(unix.EPERM)) | ||||
| 	actLog   = libseccomp.ActLog | ||||
| 	actErrno = libseccomp.ActErrno.SetReturnCode(int16(unix.EPERM)) | ||||
| ) | ||||
|  | ||||
| @@ -112,6 +113,8 @@ func getAction(act configs.Action) (libseccomp.ScmpAction, error) { | ||||
| 		return actAllow, nil | ||||
| 	case configs.Trace: | ||||
| 		return actTrace, nil | ||||
| 	case configs.Log: | ||||
| 		return actLog, nil | ||||
| 	default: | ||||
| 		return libseccomp.ActInvalid, fmt.Errorf("invalid action, cannot use in rule") | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										93
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/cmsg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/cmsg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| // +build linux | ||||
|  | ||||
| package utils | ||||
|  | ||||
| /* | ||||
|  * Copyright 2016, 2017 SUSE LLC | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
|  | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| // MaxSendfdLen is the maximum length of the name of a file descriptor being | ||||
| // sent using SendFd. The name of the file handle returned by RecvFd will never | ||||
| // be larger than this value. | ||||
| const MaxNameLen = 4096 | ||||
|  | ||||
| // oobSpace is the size of the oob slice required to store a single FD. Note | ||||
| // that unix.UnixRights appears to make the assumption that fd is always int32, | ||||
| // so sizeof(fd) = 4. | ||||
| var oobSpace = unix.CmsgSpace(4) | ||||
|  | ||||
| // RecvFd waits for a file descriptor to be sent over the given AF_UNIX | ||||
| // socket. The file name of the remote file descriptor will be recreated | ||||
| // locally (it is sent as non-auxiliary data in the same payload). | ||||
| func RecvFd(socket *os.File) (*os.File, error) { | ||||
| 	// For some reason, unix.Recvmsg uses the length rather than the capacity | ||||
| 	// when passing the msg_controllen and other attributes to recvmsg.  So we | ||||
| 	// have to actually set the length. | ||||
| 	name := make([]byte, MaxNameLen) | ||||
| 	oob := make([]byte, oobSpace) | ||||
|  | ||||
| 	sockfd := socket.Fd() | ||||
| 	n, oobn, _, _, err := unix.Recvmsg(int(sockfd), name, oob, 0) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	if n >= MaxNameLen || oobn != oobSpace { | ||||
| 		return nil, fmt.Errorf("recvfd: incorrect number of bytes read (n=%d oobn=%d)", n, oobn) | ||||
| 	} | ||||
|  | ||||
| 	// Truncate. | ||||
| 	name = name[:n] | ||||
| 	oob = oob[:oobn] | ||||
|  | ||||
| 	scms, err := unix.ParseSocketControlMessage(oob) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if len(scms) != 1 { | ||||
| 		return nil, fmt.Errorf("recvfd: number of SCMs is not 1: %d", len(scms)) | ||||
| 	} | ||||
| 	scm := scms[0] | ||||
|  | ||||
| 	fds, err := unix.ParseUnixRights(&scm) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if len(fds) != 1 { | ||||
| 		return nil, fmt.Errorf("recvfd: number of fds is not 1: %d", len(fds)) | ||||
| 	} | ||||
| 	fd := uintptr(fds[0]) | ||||
|  | ||||
| 	return os.NewFile(fd, string(name)), nil | ||||
| } | ||||
|  | ||||
| // SendFd sends a file descriptor over the given AF_UNIX socket. In | ||||
| // addition, the file.Name() of the given file will also be sent as | ||||
| // non-auxiliary data in the same payload (allowing to send contextual | ||||
| // information for a file descriptor). | ||||
| func SendFd(socket *os.File, name string, fd uintptr) error { | ||||
| 	if len(name) >= MaxNameLen { | ||||
| 		return fmt.Errorf("sendfd: filename too long: %s", name) | ||||
| 	} | ||||
| 	oob := unix.UnixRights(int(fd)) | ||||
| 	return unix.Sendmsg(int(socket.Fd()), []byte(name), oob, nil, 0) | ||||
| } | ||||
							
								
								
									
										112
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| package utils | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| 	"unsafe" | ||||
|  | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	exitSignalOffset = 128 | ||||
| ) | ||||
|  | ||||
| // ResolveRootfs ensures that the current working directory is | ||||
| // not a symlink and returns the absolute path to the rootfs | ||||
| func ResolveRootfs(uncleanRootfs string) (string, error) { | ||||
| 	rootfs, err := filepath.Abs(uncleanRootfs) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return filepath.EvalSymlinks(rootfs) | ||||
| } | ||||
|  | ||||
| // ExitStatus returns the correct exit status for a process based on if it | ||||
| // was signaled or exited cleanly | ||||
| func ExitStatus(status unix.WaitStatus) int { | ||||
| 	if status.Signaled() { | ||||
| 		return exitSignalOffset + int(status.Signal()) | ||||
| 	} | ||||
| 	return status.ExitStatus() | ||||
| } | ||||
|  | ||||
| // WriteJSON writes the provided struct v to w using standard json marshaling | ||||
| func WriteJSON(w io.Writer, v interface{}) error { | ||||
| 	data, err := json.Marshal(v) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write(data) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // CleanPath makes a path safe for use with filepath.Join. This is done by not | ||||
| // only cleaning the path, but also (if the path is relative) adding a leading | ||||
| // '/' and cleaning it (then removing the leading '/'). This ensures that a | ||||
| // path resulting from prepending another path will always resolve to lexically | ||||
| // be a subdirectory of the prefixed path. This is all done lexically, so paths | ||||
| // that include symlinks won't be safe as a result of using CleanPath. | ||||
| func CleanPath(path string) string { | ||||
| 	// Deal with empty strings nicely. | ||||
| 	if path == "" { | ||||
| 		return "" | ||||
| 	} | ||||
|  | ||||
| 	// Ensure that all paths are cleaned (especially problematic ones like | ||||
| 	// "/../../../../../" which can cause lots of issues). | ||||
| 	path = filepath.Clean(path) | ||||
|  | ||||
| 	// If the path isn't absolute, we need to do more processing to fix paths | ||||
| 	// such as "../../../../<etc>/some/path". We also shouldn't convert absolute | ||||
| 	// paths to relative ones. | ||||
| 	if !filepath.IsAbs(path) { | ||||
| 		path = filepath.Clean(string(os.PathSeparator) + path) | ||||
| 		// This can't fail, as (by definition) all paths are relative to root. | ||||
| 		path, _ = filepath.Rel(string(os.PathSeparator), path) | ||||
| 	} | ||||
|  | ||||
| 	// Clean the path again for good measure. | ||||
| 	return filepath.Clean(path) | ||||
| } | ||||
|  | ||||
| // SearchLabels searches a list of key-value pairs for the provided key and | ||||
| // returns the corresponding value. The pairs must be separated with '='. | ||||
| func SearchLabels(labels []string, query string) string { | ||||
| 	for _, l := range labels { | ||||
| 		parts := strings.SplitN(l, "=", 2) | ||||
| 		if len(parts) < 2 { | ||||
| 			continue | ||||
| 		} | ||||
| 		if parts[0] == query { | ||||
| 			return parts[1] | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Annotations returns the bundle path and user defined annotations from the | ||||
| // libcontainer state.  We need to remove the bundle because that is a label | ||||
| // added by libcontainer. | ||||
| func Annotations(labels []string) (bundle string, userAnnotations map[string]string) { | ||||
| 	userAnnotations = make(map[string]string) | ||||
| 	for _, l := range labels { | ||||
| 		parts := strings.SplitN(l, "=", 2) | ||||
| 		if len(parts) < 2 { | ||||
| 			continue | ||||
| 		} | ||||
| 		if parts[0] == "bundle" { | ||||
| 			bundle = parts[1] | ||||
| 		} else { | ||||
| 			userAnnotations[parts[0]] = parts[1] | ||||
| 		} | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func GetIntSize() int { | ||||
| 	return int(unsafe.Sizeof(1)) | ||||
| } | ||||
							
								
								
									
										68
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| // +build !windows | ||||
|  | ||||
| package utils | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"strconv" | ||||
|  | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| // EnsureProcHandle returns whether or not the given file handle is on procfs. | ||||
| func EnsureProcHandle(fh *os.File) error { | ||||
| 	var buf unix.Statfs_t | ||||
| 	if err := unix.Fstatfs(int(fh.Fd()), &buf); err != nil { | ||||
| 		return fmt.Errorf("ensure %s is on procfs: %v", fh.Name(), err) | ||||
| 	} | ||||
| 	if buf.Type != unix.PROC_SUPER_MAGIC { | ||||
| 		return fmt.Errorf("%s is not on procfs", fh.Name()) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // CloseExecFrom applies O_CLOEXEC to all file descriptors currently open for | ||||
| // the process (except for those below the given fd value). | ||||
| func CloseExecFrom(minFd int) error { | ||||
| 	fdDir, err := os.Open("/proc/self/fd") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer fdDir.Close() | ||||
|  | ||||
| 	if err := EnsureProcHandle(fdDir); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	fdList, err := fdDir.Readdirnames(-1) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for _, fdStr := range fdList { | ||||
| 		fd, err := strconv.Atoi(fdStr) | ||||
| 		// Ignore non-numeric file names. | ||||
| 		if err != nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		// Ignore descriptors lower than our specified minimum. | ||||
| 		if fd < minFd { | ||||
| 			continue | ||||
| 		} | ||||
| 		// Intentionally ignore errors from unix.CloseOnExec -- the cases where | ||||
| 		// this might fail are basically file descriptors that have already | ||||
| 		// been closed (including and especially the one that was created when | ||||
| 		// ioutil.ReadDir did the "opendir" syscall). | ||||
| 		unix.CloseOnExec(fd) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // NewSockPair returns a new unix socket pair | ||||
| func NewSockPair(name string) (parent *os.File, child *os.File, err error) { | ||||
| 	fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	return os.NewFile(uintptr(fds[1]), name+"-p"), os.NewFile(uintptr(fds[0]), name+"-c"), nil | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/github.com/opencontainers/runc/vendor.conf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/opencontainers/runc/vendor.conf
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,7 +6,7 @@ github.com/opencontainers/runtime-spec  29686dbc5559d93fb1ef402eeda3e35c38d75af4 | ||||
| # Core libcontainer functionality. | ||||
| github.com/checkpoint-restore/go-criu   17b0214f6c48980c45dc47ecb0cfd6d9e02df723 # v3.11 | ||||
| github.com/mrunalp/fileutils            7d4729fb36185a7c1719923406c9d40e54fb93c7 | ||||
| github.com/opencontainers/selinux       3a1f366feb7aecbf7a0e71ac4cea88b31597de9e # v1.2.2 | ||||
| github.com/opencontainers/selinux       5215b1806f52b1fcc2070a8826c542c9d33cd3cf # v1.3.0 (+ CVE-2019-16884) | ||||
| github.com/seccomp/libseccomp-golang    689e3c1541a84461afc49c1c87352a6cedf72e9c # v0.9.1 | ||||
| github.com/sirupsen/logrus              8bdbc7bcc01dcbb8ec23dc8a28e332258d25251f # v1.4.1 | ||||
| github.com/syndtr/gocapability          d98352740cb2c55f81556b63d4a1ec64c5a319c2 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Estes
					Phil Estes