diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2025-06-01 21:41:07 -0700 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2025-06-01 21:41:07 -0700 |
| commit | 4f9786035f9e519db41375818e1d0b5f20da2f10 (patch) | |
| tree | b307ecc9ab55c44ace462e59549c6d7976da5bfd /include/linux/execmem.h | |
| parent | ca39500f6af9cfe6823dc5aa8fbaed788d6e35b2 (diff) | |
| parent | a95ef0199e80f3384eb992889322957d26c00102 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.16 merge window.
Diffstat (limited to 'include/linux/execmem.h')
| -rw-r--r-- | include/linux/execmem.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/linux/execmem.h b/include/linux/execmem.h index 64130ae19690..65655a5d1be2 100644 --- a/include/linux/execmem.h +++ b/include/linux/execmem.h @@ -65,6 +65,37 @@ enum execmem_range_flags { * Architectures that use EXECMEM_ROX_CACHE must implement this. */ void execmem_fill_trapping_insns(void *ptr, size_t size, bool writable); + +/** + * execmem_make_temp_rw - temporarily remap region with read-write + * permissions + * @ptr: address of the region to remap + * @size: size of the region to remap + * + * Remaps a part of the cached large page in the ROX cache in the range + * [@ptr, @ptr + @size) as writable and not executable. The caller must + * have exclusive ownership of this range and ensure nothing will try to + * execute code in this range. + * + * Return: 0 on success or negative error code on failure. + */ +int execmem_make_temp_rw(void *ptr, size_t size); + +/** + * execmem_restore_rox - restore read-only-execute permissions + * @ptr: address of the region to remap + * @size: size of the region to remap + * + * Restores read-only-execute permissions on a range [@ptr, @ptr + @size) + * after it was temporarily remapped as writable. Relies on architecture + * implementation of set_memory_rox() to restore mapping using large pages. + * + * Return: 0 on success or negative error code on failure. + */ +int execmem_restore_rox(void *ptr, size_t size); +#else +static inline int execmem_make_temp_rw(void *ptr, size_t size) { return 0; } +static inline int execmem_restore_rox(void *ptr, size_t size) { return 0; } #endif /** |
