Le 04/07/2025 à 15:49, Mike Rapoport a écrit :
From: "Mike Rapoport (Microsoft)" <r...@kernel.org>
The execmem_update_copy() that used text poking was required when memory
allocated from ROX cache was always read-only. Since now its permissions
can be switched to read-write there is no need in a function that updates
memory with text poking.
Erm. Looks like I missed the patch that introduced this change.
On some variant of powerpc, namely book3s/32, this is not feasible. The
granularity for setting the NX (non exec) bit is 256 Mbytes sections.
So the area dedicated to execmem [MODULES_VADDR; MODULES_END[ always
have the NX bit unset.
You can change any page within this area from ROX to RWX but you can't
make it RW without X. If you want RW without X you must map it in the
VMALLOC area, as VMALLOC area have NX bit always set.
Christophe
Remove it.
Signed-off-by: Mike Rapoport (Microsoft) <r...@kernel.org>
---
include/linux/execmem.h | 13 -------------
mm/execmem.c | 5 -----
2 files changed, 18 deletions(-)
diff --git a/include/linux/execmem.h b/include/linux/execmem.h
index 3be35680a54f..734fbe83d98e 100644
--- a/include/linux/execmem.h
+++ b/include/linux/execmem.h
@@ -185,19 +185,6 @@ DEFINE_FREE(execmem, void *, if (_T) execmem_free(_T));
struct vm_struct *execmem_vmap(size_t size);
#endif
-/**
- * execmem_update_copy - copy an update to executable memory
- * @dst: destination address to update
- * @src: source address containing the data
- * @size: how many bytes of memory shold be copied
- *
- * Copy @size bytes from @src to @dst using text poking if the memory at
- * @dst is read-only.
- *
- * Return: a pointer to @dst or NULL on error
- */
-void *execmem_update_copy(void *dst, const void *src, size_t size);
-
/**
* execmem_is_rox - check if execmem is read-only
* @type - the execmem type to check
diff --git a/mm/execmem.c b/mm/execmem.c
index 2b683e7d864d..0712ebb4eb77 100644
--- a/mm/execmem.c
+++ b/mm/execmem.c
@@ -399,11 +399,6 @@ void execmem_free(void *ptr)
vfree(ptr);
}
-void *execmem_update_copy(void *dst, const void *src, size_t size)
-{
- return text_poke_copy(dst, src, size);
-}
-
bool execmem_is_rox(enum execmem_type type)
{
return !!(execmem_info->ranges[type].flags & EXECMEM_ROX_CACHE);