On Sat 2017-09-30 11:53:17, Sergey Senozhatsky wrote: > We are moving towards separate kernel and module function descriptor > dereference callbacks. This patch enables it for parisc64. > > For pointers that belong to the kernel > - Added __start_opd and __end_opd pointers, to track the kernel > .opd section address range; > > - Added dereference_kernel_function_descriptor(). Now we > will dereference only function pointers that are within > [__start_opd, __end_opd]; > > For pointers that belong to a module > - Added dereference_module_function_descriptor() to handle module > function descriptor dereference. Now we will dereference only > pointers that are within [module->opd.start, module->opd.end]. > diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c > index f1a76935a314..28f89b3dcc11 100644 > --- a/arch/parisc/kernel/module.c > +++ b/arch/parisc/kernel/module.c > @@ -954,3 +955,19 @@ void module_arch_cleanup(struct module *mod) > { > deregister_unwind_table(mod); > } > + > +#ifdef CONFIG_64BIT > +unsigned long dereference_module_function_descriptor(struct module *mod, > + unsigned long addr) > +{ > + unsigned long start_opd = (Elf64_Addr)mod->core_layout.base + > + mod->arch.fdesc_offset; > + unsigned long end_opd = start_opd + > + mod->arch.fdesc_count * sizeof(Elf64_Fdesc); I know that this is used in rather slow paths. But it still might make sense to have these section borders pre-computed and stored in struct mod_arch_specific. I mean to do similar thing that we do on powerpc. Well, we could do this in a followup patch if parisc people wanted it. > + if (addr < start_opd || addr >= end_opd) > + return addr; > + > + return dereference_function_descriptor(addr); > +} > +#endif Otherwise the patch looks fine to me. Reviewed-by: Petr Mladek <pmladek@xxxxxxxx> Best Regards, Petr -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html