Skip to content

Commit

Permalink
Merge pull request #2197 from mtrmac/missing-xattr
Browse files Browse the repository at this point in the history
Fix `SafeChown` when `ContainersOverrideXattr` is unset
  • Loading branch information
openshift-merge-bot[bot] authored Dec 13, 2024
2 parents 72a358d + 2a736a7 commit 61d637b
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions pkg/idtools/idtools.go
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ func GetContainersOverrideXattr(path string) (Stat, error) {
if err != nil {
return Stat{}, err
}
return parseOverrideXattr(xstat)
return parseOverrideXattr(xstat) // This will fail if (xstat, err) == (nil, nil), i.e. the xattr does not exist.
}

func parseOverrideXattr(xstat []byte) (Stat, error) {
Expand Down Expand Up @@ -522,11 +522,17 @@ func SafeChown(name string, uid, gid int) error {
Mode: os.FileMode(0o0700),
}
xstat, err := system.Lgetxattr(name, ContainersOverrideXattr)
if err == nil {
if err == nil && xstat != nil {
stat, err = parseOverrideXattr(xstat)
if err != nil {
return err
}
} else {
st, err := os.Stat(name) // Ideally we would share this with system.Stat below, but then we would need to convert Mode.
if err != nil {
return err
}
stat.Mode = st.Mode()
}
stat.IDs = IDPair{UID: uid, GID: gid}
if err = SetContainersOverrideXattr(name, stat); err != nil {
Expand All @@ -549,11 +555,17 @@ func SafeLchown(name string, uid, gid int) error {
Mode: os.FileMode(0o0700),
}
xstat, err := system.Lgetxattr(name, ContainersOverrideXattr)
if err == nil {
if err == nil && xstat != nil {
stat, err = parseOverrideXattr(xstat)
if err != nil {
return err
}
} else {
st, err := os.Lstat(name) // Ideally we would share this with system.Stat below, but then we would need to convert Mode.
if err != nil {
return err
}
stat.Mode = st.Mode()
}
stat.IDs = IDPair{UID: uid, GID: gid}
if err = SetContainersOverrideXattr(name, stat); err != nil {
Expand Down

0 comments on commit 61d637b

Please sign in to comment.