From d3b19e94842e8b3a2b387f3e306b1d7a3e06dd6f Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Thu, 24 Aug 2023 22:55:55 -0700 Subject: [PATCH] proc: add /proc/{bus,fs,irq,sysrq-trigger} Docker fails starting a container without these paths. All of them are enumerated in readonlyPaths of a container spec. PiperOrigin-RevId: 559984658 --- pkg/sentry/fsimpl/proc/filesystem.go | 9 +++++++++ pkg/sentry/fsimpl/proc/tasks.go | 4 ++++ pkg/sentry/fsimpl/proc/tasks_test.go | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/pkg/sentry/fsimpl/proc/filesystem.go b/pkg/sentry/fsimpl/proc/filesystem.go index f2697c12d..5c282b795 100644 --- a/pkg/sentry/fsimpl/proc/filesystem.go +++ b/pkg/sentry/fsimpl/proc/filesystem.go @@ -54,6 +54,15 @@ type filesystem struct { devMinor uint32 } +func (fs *filesystem) StatFSAt(ctx context.Context, rp *vfs.ResolvingPath) (linux.Statfs, error) { + d, err := fs.GetDentryAt(ctx, rp, vfs.GetDentryOptions{}) + if err != nil { + return linux.Statfs{}, err + } + d.DecRef(ctx) + return vfs.GenericStatFS(linux.PROC_SUPER_MAGIC), nil +} + // GetFilesystem implements vfs.FilesystemType.GetFilesystem. func (ft FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.VirtualFilesystem, creds *auth.Credentials, source string, opts vfs.GetFilesystemOptions) (*vfs.Filesystem, *vfs.Dentry, error) { k := kernel.KernelFromContext(ctx) diff --git a/pkg/sentry/fsimpl/proc/tasks.go b/pkg/sentry/fsimpl/proc/tasks.go index b9c743b5c..b3239f8bd 100644 --- a/pkg/sentry/fsimpl/proc/tasks.go +++ b/pkg/sentry/fsimpl/proc/tasks.go @@ -72,11 +72,15 @@ func (fs *filesystem) newTasksInode(ctx context.Context, k *kernel.Kernel, pidns "filesystems": fs.newInode(ctx, root, 0444, &filesystemsData{}), "loadavg": fs.newInode(ctx, root, 0444, &loadavgData{}), "sys": fs.newSysDir(ctx, root, k), + "bus": fs.newStaticDir(ctx, root, map[string]kernfs.Inode{}), + "fs": fs.newStaticDir(ctx, root, map[string]kernfs.Inode{}), + "irq": fs.newStaticDir(ctx, root, map[string]kernfs.Inode{}), "meminfo": fs.newInode(ctx, root, 0444, &meminfoData{}), "mounts": kernfs.NewStaticSymlink(ctx, root, linux.UNNAMED_MAJOR, fs.devMinor, fs.NextIno(), "self/mounts"), "net": kernfs.NewStaticSymlink(ctx, root, linux.UNNAMED_MAJOR, fs.devMinor, fs.NextIno(), "self/net"), "sentry-meminfo": fs.newInode(ctx, root, 0444, &sentryMeminfoData{}), "stat": fs.newInode(ctx, root, 0444, &statData{}), + "sysrq-trigger": fs.newInode(ctx, root, 0200, newStaticFile("")), "uptime": fs.newInode(ctx, root, 0444, &uptimeData{}), "version": fs.newInode(ctx, root, 0444, &versionData{}), } diff --git a/pkg/sentry/fsimpl/proc/tasks_test.go b/pkg/sentry/fsimpl/proc/tasks_test.go index 4b671a9a9..68c5d468d 100644 --- a/pkg/sentry/fsimpl/proc/tasks_test.go +++ b/pkg/sentry/fsimpl/proc/tasks_test.go @@ -47,9 +47,12 @@ var ( var ( tasksStaticFiles = map[string]testutil.DirentType{ + "bus": linux.DT_DIR, "cmdline": linux.DT_REG, "cpuinfo": linux.DT_REG, "filesystems": linux.DT_REG, + "fs": linux.DT_DIR, + "irq": linux.DT_DIR, "loadavg": linux.DT_REG, "meminfo": linux.DT_REG, "mounts": linux.DT_LNK, @@ -58,6 +61,7 @@ var ( "sentry-meminfo": linux.DT_REG, "stat": linux.DT_REG, "sys": linux.DT_DIR, + "sysrq-trigger": linux.DT_REG, "thread-self": linux.DT_LNK, "uptime": linux.DT_REG, "version": linux.DT_REG,