overlay2 pageSize: Fix an off-by-one bug#41830
Conversation
This is a fix for docker/for-linux#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 docker/for-linux#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 <[email protected]>
tianon
left a comment
There was a problem hiding this comment.
Nice catch!
Do you think it's reasonable/possible to add an integration test, or are there "platform" fiddly bits interacting to make that difficult?
|
I'm not sure how that would work. In theory it should be possible to construct a dockerfile that exceeds the maximum number of layers (like the bug report does) but in order to hit exactly the size of a page you'd have to tweak the |
|
Right, that's what I was afraid of (but wasn't 100% understanding all the variables in the issue this fixes). Thanks for explaining! 👍 |
fixes docker/for-linux#1012 Overlay2 mount fails for larger Dockerfiles when length of data-root is 24
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 docker/for-linux#1012 fails with
with the output of
dmesg -Tas:with this fix, you get the expected:
- What I did
- How I did it
- How to verify it
- Description for the changelog
- A picture of a cute animal (not mandatory but encouraged)