Skip to content

[release/2.1] core/mount: fix getUnprivilegedMountFlags iterating over indices instead of values#12943

Merged
mxpv merged 2 commits intocontainerd:release/2.1from
k8s-infra-cherrypick-robot:cherry-pick-12941-to-release/2.1
Feb 27, 2026
Merged

[release/2.1] core/mount: fix getUnprivilegedMountFlags iterating over indices instead of values#12943
mxpv merged 2 commits intocontainerd:release/2.1from
k8s-infra-cherrypick-robot:cherry-pick-12941-to-release/2.1

Conversation

@k8s-infra-cherrypick-robot
Copy link
Copy Markdown

@k8s-infra-cherrypick-robot k8s-infra-cherrypick-robot commented Feb 26, 2026

This is an automated cherry-pick of #12941

/assign AkihiroSuda

Fix unintended dropping of mount flags for read-only bind-mounts in user namespaces

…ead of values

The loop `for flag := range unprivilegedFlags` iterates over slice
indices (0,1,2,3,4,5,6) rather than the actual flag values (MS_RDONLY,
MS_NODEV, etc). This was a porting error from moby/moby where the data
structure was a map (where `for k := range m` yields keys/values).

As a result, MS_NOEXEC, MS_NOATIME, MS_RELATIME, and MS_NODIRATIME are
never detected or preserved. In user namespaces, this causes bind-mount
remounts to fail with EPERM when any of these flags are locked on the
parent mount, because the kernel requires all CL_UNPRIVILEGED locked
flags to be preserved during remount.

MS_RDONLY (0x1), MS_NOSUID (0x2), and MS_NODEV (0x4) happened to work
by coincidence because their values equal low index numbers.

Fix by using `for _, flag := range` to iterate over values.

Signed-off-by: Luke Hinds <[email protected]>
Mounts a tmpfs with MS_NOEXEC, MS_NOATIME, and MS_NODIRATIME and
verifies that getUnprivilegedMountFlags detects all of them. These
three flags were the ones missed by the range-over-indices bug.

Also verifies that flags not present on the mount (MS_NOSUID,
MS_NODEV, MS_RDONLY) are not falsely reported.

Signed-off-by: Luke Hinds <[email protected]>
@github-project-automation github-project-automation Bot moved this from Needs Triage to Review In Progress in Pull Request Review Feb 27, 2026
@mxpv mxpv merged commit de5f6ac into containerd:release/2.1 Feb 27, 2026
88 of 90 checks passed
@github-project-automation github-project-automation Bot moved this from Review In Progress to Done in Pull Request Review Feb 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

7 participants