From 118a17d92dcf2edb1ba7a29197922c15f830cd31 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Fri, 4 Aug 2023 08:43:21 -0700 Subject: [PATCH] kernfs: set DenySpliceIn for DynamicBytesFD DynamicBytesFD is used for cgroup and proc files. In Linux, these file systems don't set splice_write callbacks. Reported-by: syzbot+79b8543454bedce9858b@syzkaller.appspotmail.com PiperOrigin-RevId: 553818208 --- pkg/sentry/fsimpl/kernfs/dynamic_bytes_file.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/sentry/fsimpl/kernfs/dynamic_bytes_file.go b/pkg/sentry/fsimpl/kernfs/dynamic_bytes_file.go index 52ed496d7..cae0a81f4 100644 --- a/pkg/sentry/fsimpl/kernfs/dynamic_bytes_file.go +++ b/pkg/sentry/fsimpl/kernfs/dynamic_bytes_file.go @@ -105,7 +105,11 @@ type DynamicBytesFD struct { // Init initializes a DynamicBytesFD. func (fd *DynamicBytesFD) Init(m *vfs.Mount, d *Dentry, data vfs.DynamicBytesSource, locks *vfs.FileLocks, flags uint32) error { fd.LockFD.Init(locks) - if err := fd.vfsfd.Init(fd, flags, m, d.VFSDentry(), &vfs.FileDescriptionOptions{}); err != nil { + if err := fd.vfsfd.Init(fd, flags, m, d.VFSDentry(), + &vfs.FileDescriptionOptions{ + DenySpliceIn: true, + }, + ); err != nil { return err } fd.inode = d.inode