<!-- description --> @brief Validates the provided pt_load segment. <!-- inputs/outputs --> @param phdr the pt_load segment to validate
| 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. |
nothing calls this directly
no outgoing calls
no test coverage detected