diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-07-08 04:39:27 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-07-08 04:39:27 +0000 |
commit | cd5ec7185bddade490180b0d1d177da8dbc24664 (patch) | |
tree | 807f5683eed7173952af35485e27126d44a5e813 /pkg/sentry/loader/elf.go | |
parent | 8d88155b63275cc43ab26c8f6d81342850c4dacc (diff) | |
parent | efa2615eb008a642dc542176759dc560c5f48a2d (diff) |
Merge release-20200622.1-78-gefa2615eb (automated)
Diffstat (limited to 'pkg/sentry/loader/elf.go')
-rw-r--r-- | pkg/sentry/loader/elf.go | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/pkg/sentry/loader/elf.go b/pkg/sentry/loader/elf.go index 616fafa2c..ddeaff3db 100644 --- a/pkg/sentry/loader/elf.go +++ b/pkg/sentry/loader/elf.go @@ -90,14 +90,23 @@ type elfInfo struct { sharedObject bool } +// fullReader interface extracts the ReadFull method from fsbridge.File so that +// client code does not need to define an entire fsbridge.File when only read +// functionality is needed. +// +// TODO(gvisor.dev/issue/1035): Once VFS2 ships, rewrite this to wrap +// vfs.FileDescription's PRead/Read instead. +type fullReader interface { + // ReadFull is the same as fsbridge.File.ReadFull. + ReadFull(ctx context.Context, dst usermem.IOSequence, offset int64) (int64, error) +} + // parseHeader parse the ELF header, verifying that this is a supported ELF // file and returning the ELF program headers. // // This is similar to elf.NewFile, except that it is more strict about what it // accepts from the ELF, and it doesn't parse unnecessary parts of the file. -// -// ctx may be nil if f does not need it. -func parseHeader(ctx context.Context, f fsbridge.File) (elfInfo, error) { +func parseHeader(ctx context.Context, f fullReader) (elfInfo, error) { // Check ident first; it will tell us the endianness of the rest of the // structs. var ident [elf.EI_NIDENT]byte |