Re: [PATCH v1 1/8] powerpc/lib/code-patching: Enhance code patching
From: Balbir Singh <bsingharora@gmail.com>
Date: 2017-05-28 22:59:25
On Sun, 2017-05-28 at 16:29 +0200, christophe leroy wrote:
Le 25/05/2017 à 05:36, Balbir Singh a écrit :quoted
Today our patching happens via direct copy and patch_instruction. The patching code is well contained in the sense that copying bits are limited. While considering implementation of CONFIG_STRICT_RWX, the first requirement is to a create another mapping that will allow for patching. We create the window using text_poke_area, allocated via get_vm_area(), which might be an overkill. We can do per-cpu stuff as well. The downside of these patches that patch_instruction is now synchornized using a lock. Other arches do similar things, but use fixmaps. The reason for not using fixmaps is to make use of any randomization in the future. The code also relies on set_pte_at and pte_clear to do the appropriate tlb flushing. Signed-off-by: Balbir Singh <bsingharora@gmail.com>[...]quoted
+static int kernel_map_addr(void *addr) +{ + unsigned long pfn; int err; - __put_user_size(instr, addr, 4, err); + if (is_vmalloc_addr(addr)) + pfn = vmalloc_to_pfn(addr); + else + pfn = __pa_symbol(addr) >> PAGE_SHIFT; + + err = map_kernel_page((unsigned long)text_poke_area->addr, + (pfn << PAGE_SHIFT), _PAGE_KERNEL_RW | _PAGE_PRESENT);map_kernel_page() doesn't exist on powerpc32, so compilation fails. However a similar function exists and is called map_page() Maybe the below modification could help (not tested yet) Christophe
Thanks, I'll try and get a compile, as an alternative how about #ifdef CONFIG_PPC32 #define map_kernel_page map_page #endif Balbir Singh.