mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
rootfs: only set mode= for tmpfs mount if target already existed
This was always the intended behaviour but commit72fbb34f50("rootfs: switch to fd-based handling of mountpoint targets") regressed it when adding a mechanism to create a file handle to the target if it didn't already exist (causing the later stat to always succeed). A lot of people depend on this functionality, so add some tests to make sure we don't break it in the future. Fixes:72fbb34f50("rootfs: switch to fd-based handling of mountpoint targets") Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
This commit is contained in:
@@ -513,6 +513,18 @@ func (m *mountEntry) createOpenMountpoint(rootfs string) (Err error) {
|
||||
_ = dstFile.Close()
|
||||
}
|
||||
}()
|
||||
if err == nil && m.Device == "tmpfs" {
|
||||
// If the original target exists, copy the mode for the tmpfs mount.
|
||||
stat, err := dstFile.Stat()
|
||||
if err != nil {
|
||||
return fmt.Errorf("check tmpfs source mode: %w", err)
|
||||
}
|
||||
dt := fmt.Sprintf("mode=%04o", syscallMode(stat.Mode()))
|
||||
if m.Data != "" {
|
||||
dt = dt + "," + m.Data
|
||||
}
|
||||
m.Data = dt
|
||||
}
|
||||
if err != nil {
|
||||
if !errors.Is(err, unix.ENOENT) {
|
||||
return fmt.Errorf("lookup mountpoint target: %w", err)
|
||||
@@ -553,19 +565,6 @@ func (m *mountEntry) createOpenMountpoint(rootfs string) (Err error) {
|
||||
}
|
||||
}
|
||||
|
||||
if m.Device == "tmpfs" {
|
||||
// If the original target exists, copy the mode for the tmpfs mount.
|
||||
stat, err := dstFile.Stat()
|
||||
if err != nil {
|
||||
return fmt.Errorf("check tmpfs source mode: %w", err)
|
||||
}
|
||||
dt := fmt.Sprintf("mode=%04o", syscallMode(stat.Mode()))
|
||||
if m.Data != "" {
|
||||
dt = dt + "," + m.Data
|
||||
}
|
||||
m.Data = dt
|
||||
}
|
||||
|
||||
dstFullPath, err := procfs.ProcSelfFdReadlink(dstFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get mount destination real path: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user