gvisor/pkg/sentry/usermem
Jamie Liu 26583e413e Convert []byte to string without copying in usermem.CopyStringIn.
This is the same technique used by Go's strings.Builder
(https://golang.org/src/strings/builder.go#L45), and for the same
reason. (We can't just use strings.Builder because there's no way to get
the underlying []byte to pass to usermem.IO.CopyIn.)

PiperOrigin-RevId: 240594892
Change-Id: Ic070e7e480aee53a71289c7c120850991358c52c
2019-03-27 10:46:28 -07:00
..
BUILD Convert []byte to string without copying in usermem.CopyStringIn. 2019-03-27 10:46:28 -07:00
README.md Format documentation 2018-07-12 10:37:21 -07:00
access_type.go Call memmap.Mappable.Translate with more conservative usermem.AccessType. 2019-03-25 12:42:43 -07:00
addr.go Use correct company name in copyright header 2018-10-19 16:35:11 -07:00
addr_range_seq_test.go Use correct company name in copyright header 2018-10-19 16:35:11 -07:00
addr_range_seq_unsafe.go Use correct company name in copyright header 2018-10-19 16:35:11 -07:00
bytes_io.go Use correct company name in copyright header 2018-10-19 16:35:11 -07:00
bytes_io_unsafe.go Priority-inheritance futex implementation 2019-03-05 23:40:18 -08:00
usermem.go Convert []byte to string without copying in usermem.CopyStringIn. 2019-03-27 10:46:28 -07:00
usermem_arm64.go Add usermem support for arm64 platform. 2019-01-07 15:40:26 -08:00
usermem_test.go Use correct company name in copyright header 2018-10-19 16:35:11 -07:00
usermem_unsafe.go Convert []byte to string without copying in usermem.CopyStringIn. 2019-03-27 10:46:28 -07:00
usermem_x86.go Use correct company name in copyright header 2018-10-19 16:35:11 -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.