summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fsimpl/pipefs/pipefs.go
diff options
context:
space:
mode:
authorDean Deng <deandeng@google.com>2020-12-31 09:48:56 -0800
committergVisor bot <gvisor-bot@google.com>2020-12-31 09:51:01 -0800
commit807a080d9574e42dae83bb8bd0863b110b98a858 (patch)
treef3aa355a50bc64fa8751ec3a533cf8265c4c37ab /pkg/sentry/fsimpl/pipefs/pipefs.go
parent3b1d37f6ab5ca547020fdd573d3bf6a621313132 (diff)
Add missing error checks for FileDescription.Init.
Syzkaller discovered this bug in pipefs by doing something quite strange: creat(&(0x7f0000002a00)='./file1\x00', 0x0) mount(&(0x7f0000000440)=ANY=[], &(0x7f00000002c0)='./file1\x00', &(0x7f0000000300)='devtmpfs\x00', 0x20000d, 0x0) creat(&(0x7f0000000000)='./file1/file0\x00', 0x0) This can be reproduced with: touch mymount mkfifo /dev/mypipe mount -o ro -t devtmpfs devtmpfs mymount echo 123 > mymount/mypipe PiperOrigin-RevId: 349687714
Diffstat (limited to 'pkg/sentry/fsimpl/pipefs/pipefs.go')
-rw-r--r--pkg/sentry/fsimpl/pipefs/pipefs.go4
1 files changed, 2 insertions, 2 deletions
diff --git a/pkg/sentry/fsimpl/pipefs/pipefs.go b/pkg/sentry/fsimpl/pipefs/pipefs.go
index 0ecb592cf..429733c10 100644
--- a/pkg/sentry/fsimpl/pipefs/pipefs.go
+++ b/pkg/sentry/fsimpl/pipefs/pipefs.go
@@ -164,11 +164,11 @@ func (i *inode) StatFS(ctx context.Context, fs *vfs.Filesystem) (linux.Statfs, e
// and write ends of a newly-created pipe, as for pipe(2) and pipe2(2).
//
// Preconditions: mnt.Filesystem() must have been returned by NewFilesystem().
-func NewConnectedPipeFDs(ctx context.Context, mnt *vfs.Mount, flags uint32) (*vfs.FileDescription, *vfs.FileDescription) {
+func NewConnectedPipeFDs(ctx context.Context, mnt *vfs.Mount, flags uint32) (*vfs.FileDescription, *vfs.FileDescription, error) {
fs := mnt.Filesystem().Impl().(*filesystem)
inode := newInode(ctx, fs)
var d kernfs.Dentry
d.Init(&fs.Filesystem, inode)
defer d.DecRef(ctx)
- return inode.pipe.ReaderWriterPair(mnt, d.VFSDentry(), flags)
+ return inode.pipe.ReaderWriterPair(ctx, mnt, d.VFSDentry(), flags)
}