summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fs/ext/symlink.go
diff options
context:
space:
mode:
authorAyush Ranjan <ayushranjan@google.com>2019-07-30 19:42:50 -0700
committergVisor bot <gvisor-bot@google.com>2019-07-30 19:43:59 -0700
commit5afa642deb190dbacee225d05f58de69f775d3f3 (patch)
treea086d06ea3193f72770f5ca7620dfc8979e9d531 /pkg/sentry/fs/ext/symlink.go
parent9fbe984dc13f1af42bf3a73b696f7358794dd2d4 (diff)
ext: Migrate from using fileReader custom interface to using io.Reader.
It gets rid of holding state of the io.Reader offset (which is anyways held by the vfs.FileDescriptor struct. It is also odd using a io.Reader becuase we using io.ReaderAt to interact with the device. So making a io.ReaderAt wrapper makes more sense. Most importantly, it gets rid of the complexity of extracting the file reader from a regular file implementation and then using it. Now we can just use the regular file implementation as a reader which is more intuitive. PiperOrigin-RevId: 260846927
Diffstat (limited to 'pkg/sentry/fs/ext/symlink.go')
-rw-r--r--pkg/sentry/fs/ext/symlink.go9
1 files changed, 3 insertions, 6 deletions
diff --git a/pkg/sentry/fs/ext/symlink.go b/pkg/sentry/fs/ext/symlink.go
index 6a55c1a7b..9f498d989 100644
--- a/pkg/sentry/fs/ext/symlink.go
+++ b/pkg/sentry/fs/ext/symlink.go
@@ -15,8 +15,6 @@
package ext
import (
- "io"
-
"gvisor.dev/gvisor/pkg/syserror"
)
@@ -28,7 +26,7 @@ type symlink struct {
// newSymlink is the symlink constructor. It reads out the symlink target from
// the inode (however it might have been stored).
-func newSymlink(dev io.ReaderAt, blkSize uint64, inode inode) (*symlink, error) {
+func newSymlink(inode inode) (*symlink, error) {
var file *symlink
var link []byte
@@ -39,14 +37,13 @@ func newSymlink(dev io.ReaderAt, blkSize uint64, inode inode) (*symlink, error)
link = inode.diskInode.Data()[:size]
} else {
// Create a regular file out of this inode and read out the target.
- regFile, err := newRegularFile(dev, blkSize, inode)
+ regFile, err := newRegularFile(inode)
if err != nil {
return nil, err
}
link = make([]byte, size)
- reader := regFile.impl.getFileReader(dev, blkSize, 0)
- if _, err := io.ReadFull(reader, link); err != nil {
+ if n, _ := regFile.impl.ReadAt(link, 0); uint64(n) < size {
return nil, syserror.EIO
}
}