66 lines
1.9 KiB
Diff
66 lines
1.9 KiB
Diff
From 6594fe86b84fa69fd44172694d9495b37e5c653a Mon Sep 17 00:00:00 2001
|
|
From: Brian Goff <cpuguy83@gmail.com>
|
|
Date: Thu, 22 Jun 2023 21:35:19 +0000
|
|
Subject: [PATCH 2/4] Fix tmpfs mode opts when dir already exists
|
|
|
|
When a directory already exists (or after a container is restarted) the
|
|
perms of the directory being mounted to were being used even when a
|
|
different permission is set on the tmpfs mount options.
|
|
|
|
This prepends the original directory perms to the mount options.
|
|
If the perms were already set in the mount opts then those perms will
|
|
win.
|
|
This eliminates the need to perform a chmod after mount entirely.
|
|
|
|
Reference:https://github.com/opencontainers/runc/commit/9fa8b9de3e74c306db186494187fb789f0fdab4d
|
|
|
|
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
|
|
---
|
|
libcontainer/rootfs_linux.go | 20 ++++++++------------
|
|
1 file changed, 8 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/libcontainer/rootfs_linux.go b/libcontainer/rootfs_linux.go
|
|
index 8ce09f6f..8749114b 100644
|
|
--- a/libcontainer/rootfs_linux.go
|
|
+++ b/libcontainer/rootfs_linux.go
|
|
@@ -467,11 +467,16 @@ func mountToRootfs(m *configs.Mount, c *mountConfig) error {
|
|
}
|
|
return label.SetFileLabel(dest, mountLabel)
|
|
case "tmpfs":
|
|
- stat, err := os.Stat(dest)
|
|
- if err != nil {
|
|
+ if stat, err := os.Stat(dest); err != nil {
|
|
if err := os.MkdirAll(dest, 0o755); err != nil {
|
|
return err
|
|
}
|
|
+ } else {
|
|
+ dt := fmt.Sprintf("mode=%04o", stat.Mode())
|
|
+ if m.Data != "" {
|
|
+ dt = dt + "," + m.Data
|
|
+ }
|
|
+ m.Data = dt
|
|
}
|
|
|
|
if m.Extensions&configs.EXT_COPYUP == configs.EXT_COPYUP {
|
|
@@ -480,16 +485,7 @@ func mountToRootfs(m *configs.Mount, c *mountConfig) error {
|
|
err = mountPropagate(m, rootfs, mountLabel, nil)
|
|
}
|
|
|
|
- if err != nil {
|
|
- return err
|
|
- }
|
|
-
|
|
- if stat != nil {
|
|
- if err = os.Chmod(dest, stat.Mode()); err != nil {
|
|
- return err
|
|
- }
|
|
- }
|
|
- return nil
|
|
+ return err
|
|
case "bind":
|
|
if err := prepareBindMount(m, rootfs, mountFd); err != nil {
|
|
return err
|
|
--
|
|
2.27.0
|
|
|