Introduce debug page wise kernel area protection functions.
This adds a pair of functions vm_prepare_kernel_area_debug_protection() and vm_set_kernel_area_debug_protection() to set a kernel area up for page wise protection and to actually protect individual pages respectively. It was already possible to read and write protect full areas via area protection flags and not mapping any actual pages. For areas that actually have mapped pages this doesn't work however as no fault, at which the permissions could be checked, is generated on access. These new functions use the debug helpers of the translation map to mark individual pages as non-present without unmapping them. This allows them to be "protected", i.e. causing a fault on read and write access. As they aren't actually unmapped they can later be marked present again. Note that these are debug helpers and have quite a few restrictions as described in the comment above the function and is only useful for some very specific and constrained use cases.
This commit is contained in:
@@ -86,6 +86,10 @@ area_id transfer_area(area_id id, void** _address, uint32 addressSpec,
|
||||
|
||||
const char* vm_cache_type_to_string(int32 type);
|
||||
|
||||
status_t vm_prepare_kernel_area_debug_protection(area_id id, void** cookie);
|
||||
status_t vm_set_kernel_area_debug_protection(void* cookie, void* _address,
|
||||
size_t size, uint32 protection);
|
||||
|
||||
status_t vm_block_address_range(const char* name, void* address, addr_t size);
|
||||
status_t vm_unreserve_address_range(team_id team, void *address, addr_t size);
|
||||
status_t vm_reserve_address_range(team_id team, void **_address,
|
||||
|
||||
Reference in New Issue
Block a user