class Sysmem

Defined at line 62 of file ../../src/sysmem/server/sysmem.h

The fuchsia_hardware_sysmem::Sysmem protocol is a privileged backend registration protocol used

ONLY by the securemem driver (RegisterSecureMem) and by external heap drivers such as goldfish

(RegisterHeap).

Normal sysmem clients (including almost all drivers) use fuchsia_sysmem2::Allocator instead.

Security model: Callers with access to fuchsia_hardware_sysmem::Sysmem are trusted. Access

control is enforced by Component Framework capability routing (only drivers that specifically and

legitimately need to register a heap or securemem may declare `use` of this protocol).

Public Members

thread_checker client_checker_
optional loop_checker_

Public Methods

inspect::Node * heap_node ()

Defined at line 114 of file ../../src/sysmem/server/sysmem.h

async_dispatcher_t * loop_dispatcher ()

This is the dispatcher we run most of sysmem on (at least for now).

Defined at line 155 of file ../../src/sysmem/server/sysmem.h

async_dispatcher_t * client_dispatcher ()

Defined at line 156 of file ../../src/sysmem/server/sysmem.h

std::unordered_set<LogicalBufferCollection *> & logical_buffer_collections ()

Defined at line 158 of file ../../src/sysmem/server/sysmem.h

void AddLogicalBufferCollection (LogicalBufferCollection * collection)

Defined at line 163 of file ../../src/sysmem/server/sysmem.h

void RemoveLogicalBufferCollection (LogicalBufferCollection * collection)

Defined at line 168 of file ../../src/sysmem/server/sysmem.h

inspect::Node & collections_node ()

Defined at line 177 of file ../../src/sysmem/server/sysmem.h

void set_settings (const Settings & settings)

Defined at line 179 of file ../../src/sysmem/server/sysmem.h

const Settings & settings ()

Defined at line 181 of file ../../src/sysmem/server/sysmem.h

void ResetThreadCheckerForTesting ()

Defined at line 183 of file ../../src/sysmem/server/sysmem.h

bool protected_ranges_disable_dynamic ()

Defined at line 185 of file ../../src/sysmem/server/sysmem.h

bool is_secure_mem_expected ()

false - no secure heaps are expected to exist

true - secure heaps are expected to exist (regardless of whether any of them currently exist)

Defined at line 192 of file ../../src/sysmem/server/sysmem.h

bool is_secure_mem_ready ()

false - secure mem is expected, but is not yet ready

true - secure mem is not expected (and is therefore as ready as it will ever be / ready in the

"secure mem system is ready for allocation requests" sense), or secure mem is expected and

ready.

Defined at line 206 of file ../../src/sysmem/server/sysmem.h

bool was_secure_mem_ready ()

Defined at line 216 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void PostTask (F to_run)

Defined at line 225 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void PostTaskToClientDispatcher (F to_run)

Defined at line 232 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void RunSyncOnLoop (F to_run)

Runs `to_run` on the sysmem `loop_` dispatcher and waits for `to_run` to finish.

Must not be called from the `loop_` dispatcher, and `to_run` must not call `RunSyncOnLoop()` or

`SyncCall()`, otherwise it will hang forever.

Defined at line 243 of file ../../src/sysmem/server/sysmem.h

template <typename F>
void RunSyncOnClientDispatcher (F to_run)

Defined at line 253 of file ../../src/sysmem/server/sysmem.h

template <typename Callable, typename... Args>
auto SyncCall (Callable && callable, Args &&... args)

Runs callable on the sysmem `loop_` dispatcher and waits for `callable` to finish, and returns

whatever callable returned.

Must not be called from the `loop_` dispatcher, and `to_run` must not call `RunSyncOnLoop()` or

`SyncCall()`, otherwise it will hang forever.

Defined at line 268 of file ../../src/sysmem/server/sysmem.h

void OnAllocationFailure ()

Defined at line 299 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_sysmem::Allocator> & v1_allocators ()

Defined at line 302 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_sysmem2::Allocator> & v2_allocators ()

Defined at line 303 of file ../../src/sysmem/server/sysmem.h

fidl::ServerBindingGroup<fuchsia_hardware_sysmem::Sysmem> & BindingsForTest ()

Defined at line 311 of file ../../src/sysmem/server/sysmem.h

bool is_allocator_present_for_testing (const fuchsia_sysmem2::Heap & heap)

Defined at line 313 of file ../../src/sysmem/server/sysmem.h

bool is_secure_allocator_present_for_testing (const fuchsia_sysmem2::Heap & heap)

Defined at line 317 of file ../../src/sysmem/server/sysmem.h

void add_secure_allocator_id_for_testing (const fuchsia_sysmem2::Heap & heap)

Defined at line 321 of file ../../src/sysmem/server/sysmem.h

const UsagePixelFormatCost & usage_pixel_format_cost ()

Defined at line 326 of file ../../src/sysmem/server/sysmem.h

zx::bti & mutable_bti_for_testing ()

Defined at line 335 of file ../../src/sysmem/server/sysmem.h

zx::result<std::unique_ptr<Sysmem>> Create (async_dispatcher_t * dispatcher, const CreateArgs & create_args)

Defined at line 457 of file ../../src/sysmem/server/sysmem.cc

void Sysmem (async_dispatcher_t * dispatcher)

Use Create() instead.

Defined at line 212 of file ../../src/sysmem/server/sysmem.cc

void ~Sysmem ()

Defined at line 223 of file ../../src/sysmem/server/sysmem.cc

zx::result<> Initialize (const CreateArgs & create_args)

currently public only for tests

Defined at line 473 of file ../../src/sysmem/server/sysmem.cc

zx::result<zx::resource> GetInfoResource ()
zx_status_t GetContiguousGuardParameters (const std::optional<sysmem_config::Config> & config, uint64_t * guard_bytes_out, bool * unused_pages_guarded, int64_t * unused_guard_pattern_period_bytes, zx::duration * unused_page_check_cycle_period, bool * internal_guard_pages_out, bool * crash_on_fail_out)

Defined at line 229 of file ../../src/sysmem/server/sysmem.cc

zx_status_t RegisterHeapInternal (fuchsia_sysmem2::Heap heap, fidl::ClientEnd<fuchsia_hardware_sysmem::Heap> heap_connection)

The rest of the methods are only valid to call after Bind().

Defined at line 787 of file ../../src/sysmem/server/sysmem.cc

zx_status_t RegisterSecureMemInternal (fidl::ClientEnd<fuchsia_sysmem2::SecureMem> secure_mem_connection)

Also called directly by a test.

Defined at line 862 of file ../../src/sysmem/server/sysmem.cc

zx_status_t UnregisterSecureMemInternal ()

Also called directly by a test.

Defined at line 1074 of file ../../src/sysmem/server/sysmem.cc

const zx::bti & bti ()

MemoryAllocator::Owner implementation.

Defined at line 1096 of file ../../src/sysmem/server/sysmem.cc

zx::result<zx::vmo> CreatePhysicalVmo (uint64_t base, uint64_t size)

Only use this in cases where we really can't use zx::vmo::create_contiguous() because we must

specify a specific physical range.

Defined at line 1100 of file ../../src/sysmem/server/sysmem.cc

void CheckForUnbind ()

Defined at line 323 of file ../../src/sysmem/server/sysmem.cc

std::optional<SnapshotAnnotationRegister> & snapshot_annotation_register ()

Defined at line 350 of file ../../src/sysmem/server/sysmem.cc

SysmemMetrics & metrics ()

Defined at line 354 of file ../../src/sysmem/server/sysmem.cc

protected_ranges::ProtectedRangesCoreControl & protected_ranges_core_control (const fuchsia_sysmem2::Heap & heap)

Defined at line 356 of file ../../src/sysmem/server/sysmem.cc

zx::result<> BeginServing ()

Defined at line 741 of file ../../src/sysmem/server/sysmem.cc

void RegisterHeap (RegisterHeapRequest & request, RegisterHeapCompleter::Sync & completer)

fuchsia_hardware_sysmem::Sysmem impl; these run on client_dispatcher_.

Defined at line 1277 of file ../../src/sysmem/server/sysmem.cc

void RegisterSecureMem (RegisterSecureMemRequest & request, RegisterSecureMemCompleter::Sync & completer)

Defined at line 1298 of file ../../src/sysmem/server/sysmem.cc

void UnregisterSecureMem (UnregisterSecureMemCompleter::Sync & completer)

Defined at line 1308 of file ../../src/sysmem/server/sysmem.cc

void TrackToken (BufferCollectionToken * token)

Track/untrack the token by the koid of the server end of its FIDL channel. TrackToken() is only

allowed after/during token->OnServerKoid(). UntrackToken() is allowed even if there was never a

token->OnServerKoid() (in which case it's a nop).

While tracked, a token can be found with FindTokenByServerChannelKoid().

Defined at line 1124 of file ../../src/sysmem/server/sysmem.cc

void UntrackToken (BufferCollectionToken * token)

Defined at line 1133 of file ../../src/sysmem/server/sysmem.cc

bool TryRemoveKoidFromUnfoundTokenList (zx_koid_t token_server_koid)

Finds and removes token_server_koid from unfound_token_koids_.

Defined at line 1146 of file ../../src/sysmem/server/sysmem.cc

BufferCollectionToken * FindTokenByServerChannelKoid (zx_koid_t token_server_koid)

Find the BufferCollectionToken (if any) by the koid of the server end of its FIDL channel.

Defined at line 1159 of file ../../src/sysmem/server/sysmem.cc

FindLogicalBufferByVmoKoidResult FindLogicalBufferByVmoKoid (zx_koid_t vmo_koid)

Defined at line 1175 of file ../../src/sysmem/server/sysmem.cc

MemoryAllocator * GetAllocator (const fuchsia_sysmem2::BufferMemorySettings & settings)

Get allocator for |settings|. Returns NULL if allocator is not registered for settings.

Defined at line 1183 of file ../../src/sysmem/server/sysmem.cc

const fuchsia_hardware_sysmem::HeapProperties * GetHeapProperties (const fuchsia_sysmem2::Heap & heap)

Get heap properties of a specific memory heap allocator.

If the heap is not valid or not registered to sysmem driver, nullptr is returned.

Defined at line 1197 of file ../../src/sysmem/server/sysmem.cc

void AddVmoKoid (zx_koid_t koid, bool is_weak, LogicalBuffer & logical_buffer)

Defined at line 1207 of file ../../src/sysmem/server/sysmem.cc

void RemoveVmoKoid (zx_koid_t koid)

Defined at line 1211 of file ../../src/sysmem/server/sysmem.cc

void LogAllBufferCollections ()

Defined at line 1216 of file ../../src/sysmem/server/sysmem.cc

void ForeachSecureHeap (fit::function<bool (const fuchsia_sysmem2::Heap &)> callback)

Iff callback returns false, stop iterating and return.

Defined at line 1243 of file ../../src/sysmem/server/sysmem.cc

zx::result<zx::bti> CreateBti ()

Defined at line 709 of file ../../src/sysmem/server/sysmem.cc

Records