Merge pull request #11341 from avagin:mountinfo-int

PiperOrigin-RevId: 712733057
This commit is contained in:
gVisor bot
2025-01-06 19:38:20 -08:00
2 changed files with 12 additions and 6 deletions
+2 -4
View File
@@ -1201,8 +1201,7 @@ func (i *mountInfoData) Generate(ctx context.Context, buf *bytes.Buffer) error {
return nil
}
defer i.fs.SafeDecRef(ctx, rootDir)
i.task.Kernel().VFS().GenerateProcMountInfo(ctx, rootDir, buf)
return nil
return i.task.Kernel().VFS().GenerateProcMountInfo(ctx, rootDir, buf)
}
// mountsData is used to implement /proc/[pid]/mounts.
@@ -1233,8 +1232,7 @@ func (i *mountsData) Generate(ctx context.Context, buf *bytes.Buffer) error {
return nil
}
defer i.fs.SafeDecRef(ctx, rootDir)
i.task.Kernel().VFS().GenerateProcMounts(ctx, rootDir, buf)
return nil
return i.task.Kernel().VFS().GenerateProcMounts(ctx, rootDir, buf)
}
// +stateify savable
+10 -2
View File
@@ -1342,7 +1342,7 @@ func (mnt *Mount) Root() *Dentry {
// GenerateProcMounts emits the contents of /proc/[pid]/mounts for vfs to buf.
//
// Preconditions: taskRootDir.Ok().
func (vfs *VirtualFilesystem) GenerateProcMounts(ctx context.Context, taskRootDir VirtualDentry, buf *bytes.Buffer) {
func (vfs *VirtualFilesystem) GenerateProcMounts(ctx context.Context, taskRootDir VirtualDentry, buf *bytes.Buffer) error {
rootMnt := taskRootDir.mount
vfs.lockMounts()
@@ -1361,6 +1361,9 @@ func (vfs *VirtualFilesystem) GenerateProcMounts(ctx context.Context, taskRootDi
sort.Slice(mounts, func(i, j int) bool { return mounts[i].ID < mounts[j].ID })
for _, mnt := range mounts {
if ctx.Interrupted() {
return linuxerr.ErrInterrupted
}
// Get the path to this mount relative to task root.
mntRootVD := VirtualDentry{
mount: mnt,
@@ -1404,13 +1407,14 @@ func (vfs *VirtualFilesystem) GenerateProcMounts(ctx context.Context, taskRootDi
// is allowed.
fmt.Fprintf(buf, "%s %s %s %s %d %d\n", "none", path, mnt.fs.FilesystemType().Name(), opts, 0, 0)
}
return nil
}
// GenerateProcMountInfo emits the contents of /proc/[pid]/mountinfo for vfs to
// buf.
//
// Preconditions: taskRootDir.Ok().
func (vfs *VirtualFilesystem) GenerateProcMountInfo(ctx context.Context, taskRootDir VirtualDentry, buf *bytes.Buffer) {
func (vfs *VirtualFilesystem) GenerateProcMountInfo(ctx context.Context, taskRootDir VirtualDentry, buf *bytes.Buffer) error {
rootMnt := taskRootDir.mount
vfs.lockMounts()
@@ -1431,6 +1435,9 @@ func (vfs *VirtualFilesystem) GenerateProcMountInfo(ctx context.Context, taskRoo
creds := auth.CredentialsFromContext(ctx)
for _, mnt := range mounts {
if ctx.Interrupted() {
return linuxerr.ErrInterrupted
}
// Get the path to this mount relative to task root.
mntRootVD := VirtualDentry{
mount: mnt,
@@ -1530,6 +1537,7 @@ func (vfs *VirtualFilesystem) GenerateProcMountInfo(ctx context.Context, taskRoo
// (11) Superblock options, and final newline.
fmt.Fprintf(buf, "%s\n", superBlockOpts(pathFromRoot, mnt))
}
return nil
}
// manglePath replaces ' ', '\t', '\n', and '\\' with their octal equivalents.