MCPcopy Create free account
hub / github.com/Bareflank/hypervisor / validate_pt_load

Method validate_pt_load

kernel/src/ext_t.hpp:214–240  ·  view source on GitHub ↗

<!-- description --> @brief Validates the provided pt_load segment. <!-- inputs/outputs --> @param phdr the pt_load segment to validate

Source from the content-addressed store, hash-verified

212 /// @param phdr the pt_load segment to validate
213 ///
214 static constexpr void
215 validate_pt_load(bfelf::elf64_phdr_t const *const phdr) noexcept
216 {
217 bsl::expects(nullptr != phdr);
218
219 constexpr auto min_vaddr{HYPERVISOR_EXT_CODE_ADDR};
220 constexpr auto max_vaddr{(min_vaddr + HYPERVISOR_EXT_CODE_SIZE).checked()};
221
222 bsl::expects((phdr->p_vaddr) >= min_vaddr);
223 bsl::expects((phdr->p_vaddr + bsl::to_umx(phdr->p_memsz)).checked() <= max_vaddr);
224
225 if (bsl::safe_u32::magic_0() != (phdr->p_flags & bfelf::PF_W)) {
226 bsl::expects(bsl::safe_u32::magic_0() == (phdr->p_flags & bfelf::PF_X));
227 }
228 else {
229 bsl::touch();
230 }
231
232 if (bsl::safe_u32::magic_0() != (phdr->p_flags & bfelf::PF_X)) {
233 bsl::expects(bsl::safe_u32::magic_0() == (phdr->p_flags & bfelf::PF_W));
234 }
235 else {
236 bsl::touch();
237 }
238
239 bsl::expects(phdr->p_align == HYPERVISOR_PAGE_SIZE);
240 }
241
242 /// <!-- description -->
243 /// @brief Validates the provided pt_gnu_stack segment.

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected