summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fs/tmpfs
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/sentry/fs/tmpfs')
-rw-r--r--pkg/sentry/fs/tmpfs/BUILD50
-rw-r--r--pkg/sentry/fs/tmpfs/file_test.go72
-rw-r--r--pkg/sentry/fs/tmpfs/tmpfs_state_autogen.go197
3 files changed, 197 insertions, 122 deletions
diff --git a/pkg/sentry/fs/tmpfs/BUILD b/pkg/sentry/fs/tmpfs/BUILD
deleted file mode 100644
index aa7199014..000000000
--- a/pkg/sentry/fs/tmpfs/BUILD
+++ /dev/null
@@ -1,50 +0,0 @@
-load("//tools:defs.bzl", "go_library", "go_test")
-
-package(licenses = ["notice"])
-
-go_library(
- name = "tmpfs",
- srcs = [
- "device.go",
- "file_regular.go",
- "fs.go",
- "inode_file.go",
- "tmpfs.go",
- ],
- visibility = ["//pkg/sentry:internal"],
- deps = [
- "//pkg/abi/linux",
- "//pkg/context",
- "//pkg/metric",
- "//pkg/safemem",
- "//pkg/sentry/device",
- "//pkg/sentry/fs",
- "//pkg/sentry/fs/fsutil",
- "//pkg/sentry/fs/ramfs",
- "//pkg/sentry/kernel",
- "//pkg/sentry/kernel/auth",
- "//pkg/sentry/kernel/pipe",
- "//pkg/sentry/kernel/time",
- "//pkg/sentry/memmap",
- "//pkg/sentry/socket/unix/transport",
- "//pkg/sentry/usage",
- "//pkg/sync",
- "//pkg/syserror",
- "//pkg/usermem",
- "//pkg/waiter",
- ],
-)
-
-go_test(
- name = "tmpfs_test",
- size = "small",
- srcs = ["file_test.go"],
- library = ":tmpfs",
- deps = [
- "//pkg/context",
- "//pkg/sentry/fs",
- "//pkg/sentry/kernel/contexttest",
- "//pkg/sentry/usage",
- "//pkg/usermem",
- ],
-)
diff --git a/pkg/sentry/fs/tmpfs/file_test.go b/pkg/sentry/fs/tmpfs/file_test.go
deleted file mode 100644
index aaba35502..000000000
--- a/pkg/sentry/fs/tmpfs/file_test.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2018 The gVisor Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package tmpfs
-
-import (
- "bytes"
- "testing"
-
- "gvisor.dev/gvisor/pkg/context"
- "gvisor.dev/gvisor/pkg/sentry/fs"
- "gvisor.dev/gvisor/pkg/sentry/kernel/contexttest"
- "gvisor.dev/gvisor/pkg/sentry/usage"
- "gvisor.dev/gvisor/pkg/usermem"
-)
-
-func newFileInode(ctx context.Context) *fs.Inode {
- m := fs.NewCachingMountSource(ctx, &Filesystem{}, fs.MountSourceFlags{})
- iops := NewInMemoryFile(ctx, usage.Tmpfs, fs.WithCurrentTime(ctx, fs.UnstableAttr{}))
- return fs.NewInode(ctx, iops, m, fs.StableAttr{
- DeviceID: tmpfsDevice.DeviceID(),
- InodeID: tmpfsDevice.NextIno(),
- BlockSize: usermem.PageSize,
- Type: fs.RegularFile,
- })
-}
-
-func newFile(ctx context.Context) *fs.File {
- inode := newFileInode(ctx)
- f, _ := inode.GetFile(ctx, fs.NewDirent(ctx, inode, "stub"), fs.FileFlags{Read: true, Write: true})
- return f
-}
-
-// Allocate once, write twice.
-func TestGrow(t *testing.T) {
- ctx := contexttest.Context(t)
- f := newFile(ctx)
- defer f.DecRef()
-
- abuf := bytes.Repeat([]byte{'a'}, 68)
- n, err := f.Pwritev(ctx, usermem.BytesIOSequence(abuf), 0)
- if n != int64(len(abuf)) || err != nil {
- t.Fatalf("Pwritev got (%d, %v) want (%d, nil)", n, err, len(abuf))
- }
-
- bbuf := bytes.Repeat([]byte{'b'}, 856)
- n, err = f.Pwritev(ctx, usermem.BytesIOSequence(bbuf), 68)
- if n != int64(len(bbuf)) || err != nil {
- t.Fatalf("Pwritev got (%d, %v) want (%d, nil)", n, err, len(bbuf))
- }
-
- rbuf := make([]byte, len(abuf)+len(bbuf))
- n, err = f.Preadv(ctx, usermem.BytesIOSequence(rbuf), 0)
- if n != int64(len(rbuf)) || err != nil {
- t.Fatalf("Preadv got (%d, %v) want (%d, nil)", n, err, len(rbuf))
- }
-
- if want := append(abuf, bbuf...); !bytes.Equal(rbuf, want) {
- t.Fatalf("Read %v, want %v", rbuf, want)
- }
-}
diff --git a/pkg/sentry/fs/tmpfs/tmpfs_state_autogen.go b/pkg/sentry/fs/tmpfs/tmpfs_state_autogen.go
new file mode 100644
index 000000000..894d3679e
--- /dev/null
+++ b/pkg/sentry/fs/tmpfs/tmpfs_state_autogen.go
@@ -0,0 +1,197 @@
+// automatically generated by stateify.
+
+package tmpfs
+
+import (
+ "gvisor.dev/gvisor/pkg/state"
+)
+
+func (x *regularFileOperations) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.regularFileOperations"
+}
+
+func (x *regularFileOperations) StateFields() []string {
+ return []string{
+ "iops",
+ }
+}
+
+func (x *regularFileOperations) beforeSave() {}
+
+func (x *regularFileOperations) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.iops)
+}
+
+func (x *regularFileOperations) afterLoad() {}
+
+func (x *regularFileOperations) StateLoad(m state.Source) {
+ m.Load(0, &x.iops)
+}
+
+func (x *Filesystem) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.Filesystem"
+}
+
+func (x *Filesystem) StateFields() []string {
+ return []string{}
+}
+
+func (x *Filesystem) beforeSave() {}
+
+func (x *Filesystem) StateSave(m state.Sink) {
+ x.beforeSave()
+}
+
+func (x *Filesystem) afterLoad() {}
+
+func (x *Filesystem) StateLoad(m state.Source) {
+}
+
+func (x *fileInodeOperations) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.fileInodeOperations"
+}
+
+func (x *fileInodeOperations) StateFields() []string {
+ return []string{
+ "InodeSimpleExtendedAttributes",
+ "kernel",
+ "memUsage",
+ "attr",
+ "mappings",
+ "writableMappingPages",
+ "data",
+ "seals",
+ }
+}
+
+func (x *fileInodeOperations) beforeSave() {}
+
+func (x *fileInodeOperations) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.InodeSimpleExtendedAttributes)
+ m.Save(1, &x.kernel)
+ m.Save(2, &x.memUsage)
+ m.Save(3, &x.attr)
+ m.Save(4, &x.mappings)
+ m.Save(5, &x.writableMappingPages)
+ m.Save(6, &x.data)
+ m.Save(7, &x.seals)
+}
+
+func (x *fileInodeOperations) afterLoad() {}
+
+func (x *fileInodeOperations) StateLoad(m state.Source) {
+ m.Load(0, &x.InodeSimpleExtendedAttributes)
+ m.Load(1, &x.kernel)
+ m.Load(2, &x.memUsage)
+ m.Load(3, &x.attr)
+ m.Load(4, &x.mappings)
+ m.Load(5, &x.writableMappingPages)
+ m.Load(6, &x.data)
+ m.Load(7, &x.seals)
+}
+
+func (x *Dir) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.Dir"
+}
+
+func (x *Dir) StateFields() []string {
+ return []string{
+ "ramfsDir",
+ "kernel",
+ }
+}
+
+func (x *Dir) beforeSave() {}
+
+func (x *Dir) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.ramfsDir)
+ m.Save(1, &x.kernel)
+}
+
+func (x *Dir) StateLoad(m state.Source) {
+ m.Load(0, &x.ramfsDir)
+ m.Load(1, &x.kernel)
+ m.AfterLoad(x.afterLoad)
+}
+
+func (x *Symlink) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.Symlink"
+}
+
+func (x *Symlink) StateFields() []string {
+ return []string{
+ "Symlink",
+ }
+}
+
+func (x *Symlink) beforeSave() {}
+
+func (x *Symlink) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.Symlink)
+}
+
+func (x *Symlink) afterLoad() {}
+
+func (x *Symlink) StateLoad(m state.Source) {
+ m.Load(0, &x.Symlink)
+}
+
+func (x *Socket) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.Socket"
+}
+
+func (x *Socket) StateFields() []string {
+ return []string{
+ "Socket",
+ }
+}
+
+func (x *Socket) beforeSave() {}
+
+func (x *Socket) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.Socket)
+}
+
+func (x *Socket) afterLoad() {}
+
+func (x *Socket) StateLoad(m state.Source) {
+ m.Load(0, &x.Socket)
+}
+
+func (x *Fifo) StateTypeName() string {
+ return "pkg/sentry/fs/tmpfs.Fifo"
+}
+
+func (x *Fifo) StateFields() []string {
+ return []string{
+ "InodeOperations",
+ }
+}
+
+func (x *Fifo) beforeSave() {}
+
+func (x *Fifo) StateSave(m state.Sink) {
+ x.beforeSave()
+ m.Save(0, &x.InodeOperations)
+}
+
+func (x *Fifo) afterLoad() {}
+
+func (x *Fifo) StateLoad(m state.Source) {
+ m.Load(0, &x.InodeOperations)
+}
+
+func init() {
+ state.Register((*regularFileOperations)(nil))
+ state.Register((*Filesystem)(nil))
+ state.Register((*fileInodeOperations)(nil))
+ state.Register((*Dir)(nil))
+ state.Register((*Symlink)(nil))
+ state.Register((*Socket)(nil))
+ state.Register((*Fifo)(nil))
+}