On Mon, Apr 27, 2015 at 04:28:58PM +0200, Jiri Kosina wrote: > We give up old_addr hint from the coming patch module in cases when kernel > load base has been randomized (as in such case, the coming module has no > idea about the exact randomization offset). > > We are currently too pessimistic, and give up immediately as soon as > CONFIG_RANDOMIZE_BASE is set; this doesn't however directly imply that the > load base has actually been randomized. There are config options that > disable kASLR (such as hibernation), user could have disabled kaslr on > kernel command-line, etc. > > The loader propagates the information whether kernel has been randomized > through bootparams. This allows us to have the condition more accurate. > > On top of that, it seems unnecessary to give up old_addr hints even if > randomization is active. The relocation offset can be computed using > kaslr_ofsset(), and therefore old_addr can be adjusted accordingly. > > Signed-off-by: Jiri Kosina <jkosina@xxxxxxx> Acked-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > --- > arch/x86/include/asm/livepatch.h | 1 + > kernel/livepatch/core.c | 5 +++-- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/include/asm/livepatch.h b/arch/x86/include/asm/livepatch.h > index 2d29197..19c099a 100644 > --- a/arch/x86/include/asm/livepatch.h > +++ b/arch/x86/include/asm/livepatch.h > @@ -21,6 +21,7 @@ > #ifndef _ASM_X86_LIVEPATCH_H > #define _ASM_X86_LIVEPATCH_H > > +#include <asm/setup.h> > #include <linux/module.h> > #include <linux/ftrace.h> > > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c > index 284e269..0e7c23c 100644 > --- a/kernel/livepatch/core.c > +++ b/kernel/livepatch/core.c > @@ -234,8 +234,9 @@ static int klp_find_verify_func_addr(struct klp_object *obj, > int ret; > > #if defined(CONFIG_RANDOMIZE_BASE) > - /* KASLR is enabled, disregard old_addr from user */ > - func->old_addr = 0; > + /* If KASLR has been enabled, adjust old_addr accordingly */ > + if (kaslr_enabled() && func->old_addr) > + func->old_addr += kaslr_offset(); > #endif > > if (!func->old_addr || klp_is_module(obj)) > -- > Jiri Kosina > SUSE Labs -- Josh -- To unsubscribe from this list: send the line "unsubscribe live-patching" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html