1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Prohibit more than 42 layers in the core

We need to do this because we still support aufs
and users on other drivers can push incompat images
to the registory that aufs users cannot use.
This commit is contained in:
Michael Crosby 2013-11-19 00:51:16 -08:00
parent 5a4113140e
commit af753cbad8
2 changed files with 33 additions and 0 deletions

View file

@ -211,6 +211,25 @@ func (img *Image) getParentsSize(size int64) int64 {
return parentImage.getParentsSize(size)
}
// Depth returns the number of parents for a
// current image
func (img *Image) Depth() (int, error) {
var (
count = 0
parent = img
err error
)
for parent != nil {
count++
parent, err = parent.GetParent()
if err != nil {
return -1, err
}
}
return count, nil
}
// Build an Image object from raw json data
func NewImgJSON(src []byte) (*Image, error) {
ret := &Image{}

View file

@ -23,6 +23,9 @@ import (
"time"
)
// Set the max depth to the aufs restriction
const MaxImageDepth = 42
var defaultDns = []string{"8.8.8.8", "8.8.4.4"}
type Capabilities struct {
@ -366,6 +369,17 @@ func (runtime *Runtime) Create(config *Config, name string) (*Container, []strin
return nil, nil, err
}
// We add 2 layers to the depth because the container's rw and
// init layer add to the restriction
depth, err := img.Depth()
if err != nil {
return nil, nil, err
}
if depth+2 >= MaxImageDepth {
return nil, nil, fmt.Errorf("Cannot create container with more than %d parents", MaxImageDepth)
}
checkDeprecatedExpose := func(config *Config) bool {
if config != nil {
if config.PortSpecs != nil {