runc/patch/0047-runc-Fix-tmpfs-mode-opts-when-dir-already-exists.patch
zhongjiawei e93fcb5f5a runc:symc some patches
(cherry picked from commit 6b3b6fb7d12f8699fd427a6001bf78e0937e1984)
2023-12-22 10:51:30 +08:00

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