Le 29/05/2017 à 00:58, Balbir Singh a écrit :
On Sun, 2017-05-28 at 16:29 +0200, christophe leroy wrote:

Le 25/05/2017 à 05:36, Balbir Singh a écrit :
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 <bsinghar...@gmail.com>

[...]

+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


My preference goes to renaming the PPC32 function, first because the PPC64 name fits better, second because too many defines kills readability, third because two functions doing the same thing are worth being called the same, and fourth because we surely have opportunity to merge both functions on day.

Christophe

Reply via email to