libct: skip mount for duplicate masked paths

Co-authored-by: Davanum Srinivas <davanum@gmail.com>
Refactored-by: lifubang <lifubang@acmcoder.com>
Signed-off-by: lifubang <lifubang@acmcoder.com>
This commit is contained in:
lifubang
2026-05-12 03:26:27 +00:00
committed by lfbzhm
parent a0f899b775
commit abf70bab63
2 changed files with 23 additions and 0 deletions
+9
View File
@@ -1346,6 +1346,7 @@ func maskPaths(paths []string, mountLabel string) error {
procSelfFd, closer := utils.ProcThreadSelf("fd/")
defer closer()
maskedPaths := make(map[string]struct{})
for _, path := range paths {
// Open the target path; skip if it doesn't exist.
dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC, 0)
@@ -1360,6 +1361,14 @@ func maskPaths(paths []string, mountLabel string) error {
dstFh.Close()
return fmt.Errorf("can't mask path %q: %w", path, err)
}
// skip duplicate masked paths.
cleanPath := pathrs.LexicallyCleanPath(path)
if _, ok := maskedPaths[cleanPath]; ok {
dstFh.Close()
continue
}
maskedPaths[cleanPath] = struct{}{}
var dstType string
if st.IsDir() {
// Destination is a directory: bind mount a ro tmpfs over it.