[release/2.2] pkg/oci: resolve rootfs symlinks for user lookup by fuweid · Pull Request #14005 · containerd/containerd · GitHub
Skip to content

[release/2.2] pkg/oci: resolve rootfs symlinks for user lookup - #14005

Merged
samuelkarp merged 1 commit into
containerd:release/2.2from
fuweid:22/resolve-userinfo
Sep 3, 2026
Merged

[release/2.2] pkg/oci: resolve rootfs symlinks for user lookup#14005
samuelkarp merged 1 commit into
containerd:release/2.2from
fuweid:22/resolve-userinfo

Conversation

@fuweid

@fuweid fuweid commented Aug 21, 2026

Copy link
Copy Markdown
Member

Some rootfs may use symlinks for /etc/passwd and /etc/group. For example, NixOS uses absolute symlinks to files in /nix/store. os.Root is not used because it rejects absolute symlinks.

The previous code only handled a symlink on the final path. Add a helper to resolve symlinks in every path component with fs.ReadLinkFS. Absolute symlinks are resolved from the rootfs, and the final path is still opened with fs.FS.

When tracing a path through symbolic links, the maximum number of links that can be followed is 40.

NOTE:

The interface behaviour has been changed so I update the pkg/oci testcase TestWithAppendAdditionalGroupsNoEtcGroup

--- a/pkg/oci/spec_opts_linux_test.go
+++ b/pkg/oci/spec_opts_linux_test.go
@@ -748,7 +748,7 @@ func TestWithAppendAdditionalGroupsNoEtcGroup(t *testing.T) {
                {
                        name:     "no additional gids, append root group",
                        groups:   []string{"root"},
-                       err:      "unable to find group root: openat etc/group: no such file or directory",
+                       err:      "unable to find group root: statat etc: no such file or directory",
                        expected: []uint32{0},
                },
                {

(cherry picked from commit a8fc3a0 - #13818)

Carry: #13998

Fix user and group lookup failures in container rootfs containing symlinked /etc/passwd or /etc/group

Some rootfs may use symlinks for /etc/passwd and /etc/group. For example,
NixOS uses absolute symlinks to files in /nix/store. os.Root is not used
because it rejects absolute symlinks.

The previous code only handled a symlink on the final path. Add a helper to
resolve symlinks in every path component with fs.ReadLinkFS. Absolute symlinks
are resolved from the rootfs, and the final path is still opened with fs.FS.

When tracing a path through symbolic links, the maximum number of links that
can be followed is [40][1].

NOTE:

The interface behaviour has been changed so I update the pkg/oci
testcase TestWithAppendAdditionalGroupsNoEtcGroup

```diff
--- a/pkg/oci/spec_opts_linux_test.go
+++ b/pkg/oci/spec_opts_linux_test.go
@@ -748,7 +748,7 @@ func TestWithAppendAdditionalGroupsNoEtcGroup(t *testing.T) {
                {
                        name:     "no additional gids, append root group",
                        groups:   []string{"root"},
-                       err:      "unable to find group root: openat etc/group: no such file or directory",
+                       err:      "unable to find group root: statat etc: no such file or directory",
                        expected: []uint32{0},
                },
                {
```

[1]: <https://man7.org/linux/man-pages/man7/path_resolution.7.html>

Signed-off-by: Wei Fu <fuweid89@gmail.com>
(cherry picked from commit a8fc3a0)
Signed-off-by: Wei Fu <fuweid89@gmail.com>
@github-project-automation github-project-automation Bot moved this from Needs Triage to Review In Progress in Pull Request Review Sep 3, 2026
@samuelkarp
samuelkarp merged commit dba7297 into containerd:release/2.2 Sep 3, 2026
99 of 106 checks passed
@github-project-automation github-project-automation Bot moved this from Review In Progress to Done in Pull Request Review Sep 3, 2026
@fuweid
fuweid deleted the 22/resolve-userinfo branch September 3, 2026 17:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

3 participants