| 198 | SYSINIT(link_elf_obj, SI_SUB_KLD, SI_ORDER_SECOND, link_elf_init, NULL); |
| 199 | |
| 200 | static void |
| 201 | link_elf_protect_range(elf_file_t ef, vm_offset_t start, vm_offset_t end, |
| 202 | vm_prot_t prot) |
| 203 | { |
| 204 | int error __unused; |
| 205 | |
| 206 | KASSERT(start <= end && start >= (vm_offset_t)ef->address && |
| 207 | end <= round_page((vm_offset_t)ef->address + ef->lf.size), |
| 208 | ("link_elf_protect_range: invalid range %#jx-%#jx", |
| 209 | (uintmax_t)start, (uintmax_t)end)); |
| 210 | |
| 211 | if (start == end) |
| 212 | return; |
| 213 | if (ef->preloaded) { |
| 214 | #ifdef __amd64__ |
| 215 | error = pmap_change_prot(start, end - start, prot); |
| 216 | KASSERT(error == 0, |
| 217 | ("link_elf_protect_range: pmap_change_prot() returned %d", |
| 218 | error)); |
| 219 | #endif |
| 220 | return; |
| 221 | } |
| 222 | error = vm_map_protect(kernel_map, start, end, prot, 0, |
| 223 | VM_MAP_PROTECT_SET_PROT); |
| 224 | KASSERT(error == KERN_SUCCESS, |
| 225 | ("link_elf_protect_range: vm_map_protect() returned %d", error)); |
| 226 | } |
| 227 | |
| 228 | /* |
| 229 | * Restrict permissions on linker file memory based on section flags. |
no test coverage detected