overlayfs: unmount before cleanup on build exception#215
Open
mtelvers wants to merge 1 commit into
Open
Conversation
The exception path deleted the merged dir without unmounting it first, unlike the success/error paths. rm -rf on a live overlay mountpoint fails with EBUSY, leaking the mount; retries then stack further mounts on the reused id-keyed path.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The exception path in
Overlayfs.buildranrm -rfon themergeddirectory without unmounting it first, unlike the success and error paths which unmount before deleting.When the build function raises, the overlay is still mounted, so
rm -rf mergedfails withDevice or resource busy(EBUSY) and the mount leaks. Becausemerged/workare keyed only by the content-hashidand reused, each retry mounts on top of the leaked mount, stacking overlays (observed up to 6 deep) so even the success path's singleumountcan no longer clean up. This fills the store and permanently poisons thatid.Fix: unmount
mergedin the exception handler before deleting, mirroring the success/error paths.