Skip to content

Commit 9b73b92

Browse files
committed
internal/exec: don't relabel a mountpoint that already exists
When mounting filesystems, Ignition was relabeling the mountpoint directory even if it previously existed. This isn't necessary, and fails if the mountpoint is on a read-only filesystem, such as /usr/share/oem on Flatcar. Relabel the mountpoint only if we create it. Fixes: #1452
1 parent 153df40 commit 9b73b92

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

docs/release-notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Starting with this release, ignition-validate binaries are signed with the
2626
- Clarify documentation of `passwordHash` fields
2727
- Correctly document Tang `advertisement` field as optional
2828
- Fix failure disabling nonexistent unit with systemd ≥ 252
29+
- Don't relabel a mount point that already exists
2930

3031
### Test changes
3132

internal/exec/stages/mount/mount.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,29 +123,25 @@ func (s stage) mountFs(fs types.Filesystem) error {
123123
return err
124124
}
125125

126-
var firstMissing string
127-
if distro.SelinuxRelabel() {
128-
var err error
129-
firstMissing, err = util.FindFirstMissingPathComponent(path)
126+
if _, err := os.Stat(path); err != nil && os.IsNotExist(err) {
127+
firstMissing, err := util.FindFirstMissingPathComponent(path)
130128
if err != nil {
131129
return err
132130
}
133-
}
134131

135-
if _, err := os.Stat(path); err != nil && os.IsNotExist(err) {
136132
// Record created directories for use by the files stage.
137133
// NotateMkdirAll() is relative to the DestDir.
138134
if err := s.NotateMkdirAll(relpath, 0755); err != nil {
139135
return err
140136
}
141-
} else if err != nil {
142-
return err
143-
}
144137

145-
if distro.SelinuxRelabel() {
146-
if err := s.RelabelFiles([]string{firstMissing}); err != nil {
147-
return err
138+
if distro.SelinuxRelabel() {
139+
if err := s.RelabelFiles([]string{firstMissing}); err != nil {
140+
return err
141+
}
148142
}
143+
} else if err != nil {
144+
return err
149145
}
150146

151147
args := translateOptionSliceToString(fs.MountOptions, ",")

0 commit comments

Comments
 (0)