Skip to main content

BootInfo

Struct BootInfo 

Source
#[repr(C)]
pub struct BootInfo { pub magic: u64, pub directory_va: u64, pub directory_type_id: u64, pub guest_va_base: u64, pub _reserved: [u64; 12], }
Expand description

Boot-time info published by the guest at a known location (linker section .boot_info). The host reads it after the sandbox boots to learn the VA of the guest’s cap directory, then dereferences the directory directly from host code (the kernel half is mapped at the same VA via the shallow-PML4-copy mechanism, so a directory-VA pointer is valid both in guest kernel mode and via the host’s mmap shadow of the kernel image).

magic is checked first as a sanity guard against reading a stale or wrong-binary boot region. directory_va is the address of the inner HashMap (not the wrapping Mutex), so the host reader can take the directory lock and then index by CapHash. directory_type_id lets future protocol upgrades reject a mismatched layout (today: hash of the type signature Mutex< HashMap<CapHash, Box<Cap>, FixedState, Global>> — bumped when any field is added or its type changes).

Fields§

§magic: u64

BootInfo::MAGIC (“JAR_BOOT” in ASCII, little-endian). Host reader rejects a region whose first 8 bytes don’t match.

§directory_va: u64

VA of the cap directory’s inner HashMap (NOT the wrapping Mutex). Resolved by nub-arch-x86 at boot via init_directory_va.

§directory_type_id: u64

Hash of the directory’s type signature. Bumped when the wire layout of the directory changes. Today: opaque sentinel, the host just compares for equality.

§guest_va_base: u64

Base of the per-process GUEST_VA reservation. Mirrors the host-side constant; reproduced here so the host can sanity- check the guest agrees on the layout.

§_reserved: [u64; 12]

Reserved space for future fields. Zero-initialised; host readers should not depend on the contents.

Implementations§

Source§

impl BootInfo

Source

pub const MAGIC: u64 = 0x4A41_525F_424F_4F54

Constant numeric guard. The hex digits spell “JAR_BOOT” when interpreted as ASCII bytes in big-endian order (0x4A 0x41 0x52 0x5F 0x42 0x4F 0x4F 0x54). Stored as the numeric u64 with that big-endian interpretation — read+compare is a single u64 load.

Trait Implementations§

Source§

impl Clone for BootInfo

Source§

fn clone(&self) -> BootInfo

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BootInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for BootInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
§

impl<T> Pointee for T

§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.