summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pkg/sentry/fs/copy_up.go5
-rw-r--r--pkg/sentry/fs/overlay.go7
2 files changed, 12 insertions, 0 deletions
diff --git a/pkg/sentry/fs/copy_up.go b/pkg/sentry/fs/copy_up.go
index ea74d0efd..8c949b176 100644
--- a/pkg/sentry/fs/copy_up.go
+++ b/pkg/sentry/fs/copy_up.go
@@ -402,6 +402,11 @@ func copyAttributesLocked(ctx context.Context, upper *Inode, lower *Inode) error
return err
}
for name := range lowerXattr {
+ // Don't copy-up attributes that configure an overlay in the
+ // lower.
+ if isXattrOverlay(name) {
+ continue
+ }
value, err := lower.Getxattr(name)
if err != nil {
return err
diff --git a/pkg/sentry/fs/overlay.go b/pkg/sentry/fs/overlay.go
index a63f00e0e..7357d6401 100644
--- a/pkg/sentry/fs/overlay.go
+++ b/pkg/sentry/fs/overlay.go
@@ -16,6 +16,7 @@ package fs
import (
"fmt"
+ "strings"
"sync"
"gvisor.googlesource.com/gvisor/pkg/log"
@@ -76,6 +77,12 @@ func XattrOverlayWhiteout(name string) string {
return XattrOverlayWhiteoutPrefix + name
}
+// isXattrOverlay returns whether the given extended attribute configures the
+// overlay.
+func isXattrOverlay(name string) bool {
+ return strings.HasPrefix(name, XattrOverlayPrefix)
+}
+
// NewOverlayRoot produces the root of an overlay.
//
// Preconditions: