On Tue, 28 Jul 2020 at 16:35, Masami Hiramatsu <mhiramat@xxxxxxxxxx> wrote: > > On Tue, 28 Jul 2020 13:56:43 +0300 > Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > > > On Tue, 28 Jul 2020 at 11:17, Masami Hiramatsu <mhiramat@xxxxxxxxxx> wrote: > > > > Masami or Peter should correct me if I am wrong, but it seems to me > > > > that the way kprobes uses these pages does not require them to be in > > > > relative branching range of the core kernel on any architecture, given > > > > that they are populated with individual instruction opcodes that are > > > > executed in single step mode, and relative branches are emulated (when > > > > needed) > > > > > > Actually, x86 and arm has the "relative branching range" requirements > > > for the jump optimized kprobes. For the other architectures, I think > > > we don't need it. Only executable text buffer is needed. > > > > > > > Thanks for the explanation. Today, arm64 uses the definition below. > > > > void *alloc_insn_page(void) > > { > > return __vmalloc_node_range(PAGE_SIZE, 1, VMALLOC_START, VMALLOC_END, > > GFP_KERNEL, PAGE_KERNEL_ROX, VM_FLUSH_RESET_PERMS, > > NUMA_NO_NODE, __builtin_return_address(0)); > > } > > > > Do you think we could use that as the generic implementation if we use > > MODULES_START/_END as the allocation window? > > Yes, but for the generic implementation, we don't need to consider the > relative branching range since we can override it for x86 and arm. > (and that will be almost same as module_alloc() default code) Indeed. So having kprobes specific macros that default to VMALLOC_START/END but can be overridden would be sufficient. > BTW, is PAGE_KERNEL_ROX flag available generically? > Turns out that it is not :-( > Thank you, > -- > Masami Hiramatsu <mhiramat@xxxxxxxxxx>