mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Preserve permissions when checking lower
The code was wrongly assuming that only read access was required from the lower overlay when checking for permissions. This allowed non-writable files to be writable in the overlay. Fixes #316 PiperOrigin-RevId: 255263686
This commit is contained in:
committed by
gVisor bot
parent
857e5c47e9
commit
42e212f6b7
@@ -537,12 +537,6 @@ func overlayCheck(ctx context.Context, o *overlayEntry, p PermMask) error {
|
||||
if o.upper != nil {
|
||||
err = o.upper.check(ctx, p)
|
||||
} else {
|
||||
if p.Write {
|
||||
// Since writes will be redirected to the upper filesystem, the lower
|
||||
// filesystem need not be writable, but must be readable for copy-up.
|
||||
p.Write = false
|
||||
p.Read = true
|
||||
}
|
||||
err = o.lower.check(ctx, p)
|
||||
}
|
||||
o.copyMu.RUnlock()
|
||||
|
||||
@@ -85,6 +85,19 @@ func addOverlay(ctx context.Context, conf *Config, lower *fs.Inode, name string,
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("creating tmpfs overlay: %v", err)
|
||||
}
|
||||
|
||||
// Replicate permissions and owner from lower to upper mount point.
|
||||
attr, err := lower.UnstableAttr(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("reading attributes from lower mount point: %v", err)
|
||||
}
|
||||
if !upper.InodeOperations.SetPermissions(ctx, upper, attr.Perms) {
|
||||
return nil, fmt.Errorf("error setting permission to upper mount point")
|
||||
}
|
||||
if err := upper.InodeOperations.SetOwner(ctx, upper, attr.Owner); err != nil {
|
||||
return nil, fmt.Errorf("setting owner to upper mount point: %v", err)
|
||||
}
|
||||
|
||||
return fs.NewOverlayRoot(ctx, upper, lower, upperFlags)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -240,7 +240,7 @@ syscall_test(
|
||||
syscall_test(test = "//test/syscalls/linux:munmap_test")
|
||||
|
||||
syscall_test(
|
||||
add_overlay = False, # TODO(gvisor.dev/issue/316): enable when fixed.
|
||||
add_overlay = True,
|
||||
test = "//test/syscalls/linux:open_create_test",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user