Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752765AbbDYDMB (ORCPT ); Fri, 24 Apr 2015 23:12:01 -0400 Received: from blu004-omc4s22.hotmail.com ([65.55.111.161]:55937 "EHLO BLU004-OMC4S22.hotmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751808AbbDYDL7 (ORCPT ); Fri, 24 Apr 2015 23:11:59 -0400 X-TMN: [IYFIRHChhWO4ZvQqLoPcvRK/G8epqfbK] X-Originating-Email: [minfei.huang@hotmail.com] Message-ID: Date: Sat, 25 Apr 2015 11:11:52 +0800 From: Minfei Huang To: Jiri Kosina CC: Josh Poimboeuf , Seth Jennings , Vojtech Pavlik , live-patching@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] livepatch: x86: make kASLR logic more accurate References: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-OriginalArrivalTime: 25 Apr 2015 03:11:57.0552 (UTC) FILETIME=[96CFF700:01D07F05] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3629 Lines: 101 On 04/24/15 at 09:59P, 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 as > difference between _text start and __START_KERNEL, and therefore old_addr > can be adjusted accordingly. > > Signed-off-by: Jiri Kosina > --- > > v1 -> v2: I accidentally used kgr_ suffix (which we use in kGraft) instead > of klp_ in v1. > > arch/x86/include/asm/livepatch.h | 4 ++++ > arch/x86/kernel/livepatch.c | 5 +++++ > kernel/livepatch/core.c | 5 +++-- > 3 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/include/asm/livepatch.h b/arch/x86/include/asm/livepatch.h > index 2d29197..84a3247 100644 > --- a/arch/x86/include/asm/livepatch.h > +++ b/arch/x86/include/asm/livepatch.h > @@ -23,8 +23,12 @@ > > #include > #include > +#include > > #ifdef CONFIG_LIVEPATCH > + > +extern unsigned long klp_vmlinux_relocation_offset(void); > + > static inline int klp_check_compiler_support(void) > { > #ifndef CC_USING_FENTRY > diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c > index ff3c3101d..6df7902 100644 > --- a/arch/x86/kernel/livepatch.c > +++ b/arch/x86/kernel/livepatch.c > @@ -88,3 +88,8 @@ int klp_write_module_reloc(struct module *mod, unsigned long type, > > return ret; > } > + > +unsigned long klp_vmlinux_relocation_offset(void) > +{ > + return (unsigned long)&_text - __START_KERNEL; > +} Is it possible to put above function into arch/x86/include/asm/setup.h? It is more elegant, so that the function is re-used by other module. > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c > index 284e269..ff4c35c 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 += klp_vmlinux_relocation_offset(); Since KASLR only works for x86 arch now, it is better to put it into the specfied arch (x86 now), or implement a weak function to let be overwritten by specified arch. Thanks Minfei > #endif > > if (!func->old_addr || klp_is_module(obj)) > > -- > Jiri Kosina > SUSE Labs > -- > To unsubscribe from this list: send the line "unsubscribe live-patching" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/