mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Enable FUSE rename test.
This adds some permissions checks to kernfs RenameAt that were missing. PiperOrigin-RevId: 507013151
This commit is contained in:
committed by
gVisor bot
parent
fc52a6d9cc
commit
e9471a18ff
@@ -461,21 +461,20 @@ func (i *inode) RmDir(ctx context.Context, name string, child kernfs.Inode) erro
|
||||
|
||||
// Rename implements kernfs.Inode.Rename.
|
||||
func (i *inode) Rename(ctx context.Context, oldname, newname string, child, dstDir kernfs.Inode) error {
|
||||
fusefs := i.fs
|
||||
task, creds := kernel.TaskFromContext(ctx), auth.CredentialsFromContext(ctx)
|
||||
|
||||
dstDirInode, ok := dstDir.(*inode)
|
||||
if !ok {
|
||||
return linuxerr.EXDEV
|
||||
kernelTask := kernel.TaskFromContext(ctx)
|
||||
if kernelTask == nil {
|
||||
log.Warningf("fusefs.Inode.newEntry: couldn't get kernel task from context", i.nodeID)
|
||||
return linuxerr.EINVAL
|
||||
}
|
||||
|
||||
dstDirInode := dstDir.(*inode)
|
||||
in := linux.FUSERenameIn{
|
||||
Newdir: primitive.Uint64(dstDirInode.nodeID),
|
||||
Oldname: linux.CString(oldname),
|
||||
Newname: linux.CString(newname),
|
||||
}
|
||||
req := fusefs.conn.NewRequest(creds, uint32(task.ThreadID()), i.nodeID, linux.FUSE_RENAME, &in)
|
||||
res, err := i.fs.conn.Call(task, req)
|
||||
req := i.fs.conn.NewRequest(auth.CredentialsFromContext(ctx), uint32(kernelTask.ThreadID()), i.nodeID, linux.FUSE_RENAME, &in)
|
||||
res, err := i.fs.conn.Call(kernelTask, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -681,6 +681,13 @@ func (fs *Filesystem) RenameAt(ctx context.Context, rp *vfs.ResolvingPath, oldPa
|
||||
return err
|
||||
}
|
||||
defer mnt.EndWrite()
|
||||
oldParentDir := oldParentVD.Dentry().Impl().(*Dentry).Inode()
|
||||
if err := oldParentDir.CheckPermissions(ctx, rp.Credentials(), vfs.MayWrite|vfs.MayExec); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := dstDir.inode.CheckPermissions(ctx, rp.Credentials(), vfs.MayWrite|vfs.MayExec); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
srcDirVFSD := oldParentVD.Dentry()
|
||||
srcDir := srcDirVFSD.Impl().(*Dentry)
|
||||
|
||||
@@ -566,6 +566,7 @@ syscall_test(
|
||||
|
||||
syscall_test(
|
||||
size = "medium",
|
||||
add_fusefs = True,
|
||||
add_overlay = True,
|
||||
test = "//test/syscalls/linux:rename_test",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user