mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix off-by-one bug
This is a fix for https://github.com/docker/for-linux/issues/1012. The code was not considering that C strings are NULL-terminated so we need to leave one extra byte. Without this fix, the testcase in https://github.com/docker/for-linux/issues/1012 fails with ``` Step 61/1001 : RUN echo 60 > 60 ---> Running in dde85ac3b1e3 Removing intermediate container dde85ac3b1e3 ---> 80a12a18a241 Step 62/1001 : RUN echo 61 > 61 error creating overlay mount to /23456789112345678921234/overlay2/d368abcc97d6c6ebcf23fa71225e2011d095295d5d8c9b31d6810bea748bdf07-init/merged: no such file or directory ``` with the output of `dmesg -T` as: ``` [Sat Dec 19 02:35:40 2020] overlayfs: failed to resolve '/23456789112345678921234/overlay2/89e435a1b24583c463abb73e8abfad8bf8a88312ef8253455390c5fa0a765517-init/wor': -2 ``` with this fix, you get the expected: ``` Step 126/1001 : RUN echo 125 > 125 ---> Running in 2f2e56da89e0 max depth exceeded ``` Signed-off-by: Oscar Bonilla <6f6231@gmail.com>
This commit is contained in:
parent
b5f863c67e
commit
c923f6ac3b
1 changed files with 2 additions and 2 deletions
|
@ -573,14 +573,14 @@ func (d *Driver) Get(id, mountLabel string) (_ containerfs.ContainerFS, retErr e
|
|||
// the page size. The mount syscall fails if the mount data cannot
|
||||
// fit within a page and relative links make the mount data much
|
||||
// smaller at the expense of requiring a fork exec to chroot.
|
||||
if len(mountData) > pageSize {
|
||||
if len(mountData) > pageSize-1 {
|
||||
if readonly {
|
||||
opts = indexOff + "lowerdir=" + path.Join(id, diffDirName) + ":" + string(lowers)
|
||||
} else {
|
||||
opts = indexOff + "lowerdir=" + string(lowers) + ",upperdir=" + path.Join(id, diffDirName) + ",workdir=" + path.Join(id, workDirName)
|
||||
}
|
||||
mountData = label.FormatMountLabel(opts, mountLabel)
|
||||
if len(mountData) > pageSize {
|
||||
if len(mountData) > pageSize-1 {
|
||||
return nil, fmt.Errorf("cannot mount layer, mount label too large %d", len(mountData))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue