gvisor/pkg/usermem
Jamie Liu 471b15b212 Port most syscalls to VFS2.
pipe and pipe2 aren't ported, pending a slight rework of pipe FDs for VFS2.
mount and umount2 aren't ported out of temporary laziness. access and faccessat
need additional FSImpl methods to implement properly, but are stubbed to
prevent googletest from CHECK-failing. Other syscalls require additional
plumbing.

Updates #1623

PiperOrigin-RevId: 297188448
2020-02-25 13:37:34 -08:00
..
BUILD Port most syscalls to VFS2. 2020-02-25 13:37:34 -08:00
README.md Update package locations. 2020-01-27 15:31:32 -08:00
access_type.go Update package locations. 2020-01-27 15:31:32 -08:00
addr.go Update package locations. 2020-01-27 15:31:32 -08:00
addr_range_seq_test.go Update package locations. 2020-01-27 15:31:32 -08:00
addr_range_seq_unsafe.go Update package locations. 2020-01-27 15:31:32 -08:00
bytes_io.go Update package locations. 2020-01-27 15:31:32 -08:00
bytes_io_unsafe.go Update package locations. 2020-01-27 15:31:32 -08:00
usermem.go Port most syscalls to VFS2. 2020-02-25 13:37:34 -08:00
usermem_arm64.go Update package locations. 2020-01-27 15:31:32 -08:00
usermem_test.go Update package locations. 2020-01-27 15:31:32 -08:00
usermem_x86.go Update package locations. 2020-01-27 15:31:32 -08: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.