Includes 6635b4f0c6,
which fixes a vulnerability in runc that allows a container escape (CVE-2019-5736)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2018 The Go Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
//+build !amd64,!amd64p32,!386
 | 
						|
 | 
						|
package cpu
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/binary"
 | 
						|
	"io/ioutil"
 | 
						|
	"runtime"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	_AT_HWCAP  = 16
 | 
						|
	_AT_HWCAP2 = 26
 | 
						|
 | 
						|
	procAuxv = "/proc/self/auxv"
 | 
						|
 | 
						|
	uintSize uint = 32 << (^uint(0) >> 63)
 | 
						|
)
 | 
						|
 | 
						|
// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2
 | 
						|
// These are initialized in cpu_$GOARCH.go
 | 
						|
// and should not be changed after they are initialized.
 | 
						|
var HWCap uint
 | 
						|
var HWCap2 uint
 | 
						|
 | 
						|
func init() {
 | 
						|
	buf, err := ioutil.ReadFile(procAuxv)
 | 
						|
	if err != nil {
 | 
						|
		panic("read proc auxv failed: " + err.Error())
 | 
						|
	}
 | 
						|
 | 
						|
	pb := int(uintSize / 8)
 | 
						|
 | 
						|
	for i := 0; i < len(buf)-pb*2; i += pb * 2 {
 | 
						|
		var tag, val uint
 | 
						|
		switch uintSize {
 | 
						|
		case 32:
 | 
						|
			tag = uint(binary.LittleEndian.Uint32(buf[i:]))
 | 
						|
			val = uint(binary.LittleEndian.Uint32(buf[i+pb:]))
 | 
						|
		case 64:
 | 
						|
			if runtime.GOARCH == "ppc64" {
 | 
						|
				tag = uint(binary.BigEndian.Uint64(buf[i:]))
 | 
						|
				val = uint(binary.BigEndian.Uint64(buf[i+pb:]))
 | 
						|
			} else {
 | 
						|
				tag = uint(binary.LittleEndian.Uint64(buf[i:]))
 | 
						|
				val = uint(binary.LittleEndian.Uint64(buf[i+pb:]))
 | 
						|
			}
 | 
						|
		}
 | 
						|
		switch tag {
 | 
						|
		case _AT_HWCAP:
 | 
						|
			HWCap = val
 | 
						|
		case _AT_HWCAP2:
 | 
						|
			HWCap2 = val
 | 
						|
		}
 | 
						|
	}
 | 
						|
	doinit()
 | 
						|
}
 |