gvisor/pkg/usermem
Ayush Ranjan a9441aea27 [op] Replace syscall package usage with golang.org/x/sys/unix in pkg/.
The syscall package has been deprecated in favor of golang.org/x/sys.

Note that syscall is still used in the following places:
- pkg/sentry/socket/hostinet/stack.go: some netlink related functionalities
  are not yet available in golang.org/x/sys.
- syscall.Stat_t is still used in some places because os.FileInfo.Sys() still
  returns it and not unix.Stat_t.

Updates #214

PiperOrigin-RevId: 360701387
2021-03-03 10:25:58 -08:00
..
BUILD [op] Replace syscall package usage with golang.org/x/sys/unix in pkg/. 2021-03-03 10:25:58 -08:00
README.md Update package locations. 2020-01-27 15:31:32 -08:00
access_type.go [op] Replace syscall package usage with golang.org/x/sys/unix in pkg/. 2021-03-03 10:25:58 -08:00
addr.go Implement mmap for host fs in vfs2. 2020-05-19 13:46:42 -07:00
addr_range_seq_test.go
addr_range_seq_unsafe.go Add gohacks.Slice/StringHeader. 2021-02-17 17:41:10 -08:00
bytes_io.go
bytes_io_unsafe.go
usermem.go Define tcpip.Payloader in terms of io.Reader 2021-01-22 12:26:09 -08:00
usermem_arm64.go [op] Replace syscall package usage with golang.org/x/sys/unix in pkg/. 2021-03-03 10:25:58 -08:00
usermem_test.go Replace remaining uses of reflection-based marshalling. 2020-09-29 18:08:07 -07:00
usermem_x86.go Fix 386 build tags 2020-04-01 10:00:03 -07:00

README.md

This package defines primitives for sentry access to application memory.

Major types:

  • The IO interface represents a virtual address space and provides I/O methods on that address space. IO is the lowest-level primitive. The primary implementation of the IO interface is mm.MemoryManager.

  • IOSequence represents a collection of individually-contiguous address ranges in a IO that is operated on sequentially, analogous to Linux's struct iov_iter.

Major usage patterns:

  • Access to a task's virtual memory, subject to the application's memory protections and while running on that task's goroutine, from a context that is at or above the level of the kernel package (e.g. most syscall implementations in syscalls/linux); use the kernel.Task.Copy* wrappers defined in kernel/task_usermem.go.

  • Access to a task's virtual memory, from a context that is at or above the level of the kernel package, but where any of the above constraints does not hold (e.g. PTRACE_POKEDATA, which ignores application memory protections); obtain the task's mm.MemoryManager by calling kernel.Task.MemoryManager, and call its IO methods directly.

  • Access to a task's virtual memory, from a context that is below the level of the kernel package (e.g. filesystem I/O); clients must pass I/O arguments from higher layers, usually in the form of an IOSequence. The kernel.Task.SingleIOSequence and kernel.Task.IovecsIOSequence functions in kernel/task_usermem.go are convenience functions for doing so.