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>
| ... | ... |
@@ -573,14 +573,14 @@ func (d *Driver) Get(id, mountLabel string) (_ containerfs.ContainerFS, retErr e |
| 573 | 573 |
// the page size. The mount syscall fails if the mount data cannot |
| 574 | 574 |
// fit within a page and relative links make the mount data much |
| 575 | 575 |
// smaller at the expense of requiring a fork exec to chroot. |
| 576 |
- if len(mountData) > pageSize {
|
|
| 576 |
+ if len(mountData) > pageSize-1 {
|
|
| 577 | 577 |
if readonly {
|
| 578 | 578 |
opts = indexOff + "lowerdir=" + path.Join(id, diffDirName) + ":" + string(lowers) |
| 579 | 579 |
} else {
|
| 580 | 580 |
opts = indexOff + "lowerdir=" + string(lowers) + ",upperdir=" + path.Join(id, diffDirName) + ",workdir=" + path.Join(id, workDirName) |
| 581 | 581 |
} |
| 582 | 582 |
mountData = label.FormatMountLabel(opts, mountLabel) |
| 583 |
- if len(mountData) > pageSize {
|
|
| 583 |
+ if len(mountData) > pageSize-1 {
|
|
| 584 | 584 |
return nil, fmt.Errorf("cannot mount layer, mount label too large %d", len(mountData))
|
| 585 | 585 |
} |
| 586 | 586 |
|