linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] livepatch: x86: bugfix about kASLR
@ 2015-11-04  9:32 Zhou Chengming
  2015-11-04  9:44 ` Jiri Kosina
  2015-11-04 12:27 ` Cyril B.
  0 siblings, 2 replies; 4+ messages in thread
From: Zhou Chengming @ 2015-11-04  9:32 UTC (permalink / raw)
  To: jpoimboe, sjenning, jkosina, vojtech
  Cc: live-patching, linux-kernel, guohanjun, huawei.libin, xiexiuqi, cbay

When enable KASLR, func->old_addr will be set to zero
and livepatch will find the right old address.
But for reloc, livepatch just verify it using reloc->val
(old addr from user), so verify failed and report
"kernel mismatch" error.

Reported-by: Cyril B. <cbay@alwaysdata.com>
Signed-off-by: Zhou Chengming <zhouchengming1@huawei.com>
---
 kernel/livepatch/core.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index 53196e2..c8885c6 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -311,7 +311,12 @@ static int klp_write_object_relocations(struct module *pmod,
 		return -EINVAL;
 
 	for (reloc = obj->relocs; reloc->name; reloc++) {
-		if (!klp_is_module(obj)) {
+
+#if defined(CONFIG_RANDOMIZE_BASE)
+		/* KASLR is enabled, disregard old_addr from user */
+		reloc->val = 0;
+#endif
+		if (reloc->val && !klp_is_module(obj)) {
 			ret = klp_verify_vmlinux_symbol(reloc->name,
 							reloc->val);
 			if (ret)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] livepatch: x86: bugfix about kASLR
  2015-11-04  9:32 [PATCH] livepatch: x86: bugfix about kASLR Zhou Chengming
@ 2015-11-04  9:44 ` Jiri Kosina
  2015-11-04 10:05   ` zhouchengming
  2015-11-04 12:27 ` Cyril B.
  1 sibling, 1 reply; 4+ messages in thread
From: Jiri Kosina @ 2015-11-04  9:44 UTC (permalink / raw)
  To: Zhou Chengming
  Cc: jpoimboe, sjenning, vojtech, live-patching, linux-kernel,
	guohanjun, huawei.libin, xiexiuqi, cbay

On Wed, 4 Nov 2015, Zhou Chengming wrote:

> When enable KASLR, func->old_addr will be set to zero
> and livepatch will find the right old address.
> But for reloc, livepatch just verify it using reloc->val
> (old addr from user), so verify failed and report
> "kernel mismatch" error.
> 
> Reported-by: Cyril B. <cbay@alwaysdata.com>
> Signed-off-by: Zhou Chengming <zhouchengming1@huawei.com>
> ---
>  kernel/livepatch/core.c |    7 ++++++-
>  1 files changed, 6 insertions(+), 1 deletions(-)
> 
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index 53196e2..c8885c6 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -311,7 +311,12 @@ static int klp_write_object_relocations(struct module *pmod,
>  		return -EINVAL;
>  
>  	for (reloc = obj->relocs; reloc->name; reloc++) {
> -		if (!klp_is_module(obj)) {
> +
> +#if defined(CONFIG_RANDOMIZE_BASE)

CONFIG_RANDOMIZE_BASE being enabled by itself doesn't directly imply that 
kASLR has been actually really enabled during runtime. You need 
to check kaslr_enabled() as well.

> +		/* KASLR is enabled, disregard old_addr from user */
> +		reloc->val = 0;

Is there a reason why to discard it completely? Adding kaslr_offset() 
should give us the correct address, right?

Thanks,

-- 
Jiri Kosina
SUSE Labs


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] livepatch: x86: bugfix about kASLR
  2015-11-04  9:44 ` Jiri Kosina
@ 2015-11-04 10:05   ` zhouchengming
  0 siblings, 0 replies; 4+ messages in thread
From: zhouchengming @ 2015-11-04 10:05 UTC (permalink / raw)
  To: Jiri Kosina
  Cc: jpoimboe, sjenning, vojtech, live-patching, linux-kernel,
	guohanjun, huawei.libin, xiexiuqi, cbay

On 2015/11/4 17:44, Jiri Kosina wrote:
> On Wed, 4 Nov 2015, Zhou Chengming wrote:
>
>> When enable KASLR, func->old_addr will be set to zero
>> and livepatch will find the right old address.
>> But for reloc, livepatch just verify it using reloc->val
>> (old addr from user), so verify failed and report
>> "kernel mismatch" error.
>>
>> Reported-by: Cyril B.<cbay@alwaysdata.com>
>> Signed-off-by: Zhou Chengming<zhouchengming1@huawei.com>
>> ---
>>   kernel/livepatch/core.c |    7 ++++++-
>>   1 files changed, 6 insertions(+), 1 deletions(-)
>>
>> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
>> index 53196e2..c8885c6 100644
>> --- a/kernel/livepatch/core.c
>> +++ b/kernel/livepatch/core.c
>> @@ -311,7 +311,12 @@ static int klp_write_object_relocations(struct module *pmod,
>>   		return -EINVAL;
>>
>>   	for (reloc = obj->relocs; reloc->name; reloc++) {
>> -		if (!klp_is_module(obj)) {
>> +
>> +#if defined(CONFIG_RANDOMIZE_BASE)
> CONFIG_RANDOMIZE_BASE being enabled by itself doesn't directly imply that
> kASLR has been actually really enabled during runtime. You need
> to check kaslr_enabled() as well.

Right.

>> +		/* KASLR is enabled, disregard old_addr from user */
>> +		reloc->val = 0;
> Is there a reason why to discard it completely? Adding kaslr_offset()
> should give us the correct address, right?
>
> Thanks,
>

Yes, it's definitely better.

Thanks



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] livepatch: x86: bugfix about kASLR
  2015-11-04  9:32 [PATCH] livepatch: x86: bugfix about kASLR Zhou Chengming
  2015-11-04  9:44 ` Jiri Kosina
@ 2015-11-04 12:27 ` Cyril B.
  1 sibling, 0 replies; 4+ messages in thread
From: Cyril B. @ 2015-11-04 12:27 UTC (permalink / raw)
  To: Zhou Chengming
  Cc: jpoimboe, sjenning, jkosina, vojtech, live-patching,
	linux-kernel, guohanjun, huawei.libin, xiexiuqi

Zhou Chengming wrote:
> When enable KASLR, func->old_addr will be set to zero
> and livepatch will find the right old address.
> But for reloc, livepatch just verify it using reloc->val
> (old addr from user), so verify failed and report
> "kernel mismatch" error.
>
> Reported-by: Cyril B.<cbay@alwaysdata.com>
> Signed-off-by: Zhou Chengming<zhouchengming1@huawei.com>
> ---
>   kernel/livepatch/core.c |    7 ++++++-
>   1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index 53196e2..c8885c6 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -311,7 +311,12 @@ static int klp_write_object_relocations(struct module *pmod,
>   		return -EINVAL;
>
>   	for (reloc = obj->relocs; reloc->name; reloc++) {
> -		if (!klp_is_module(obj)) {
> +
> +#if defined(CONFIG_RANDOMIZE_BASE)
> +		/* KASLR is enabled, disregard old_addr from user */
> +		reloc->val = 0;
> +#endif
> +		if (reloc->val&&  !klp_is_module(obj)) {
>   			ret = klp_verify_vmlinux_symbol(reloc->name,
>   							reloc->val);
>   			if (ret)

I still get the 'symbol not found in symbol table' error with that patch 
(on top of Linux 4.3).

Cyril

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-11-04 16:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-04  9:32 [PATCH] livepatch: x86: bugfix about kASLR Zhou Chengming
2015-11-04  9:44 ` Jiri Kosina
2015-11-04 10:05   ` zhouchengming
2015-11-04 12:27 ` Cyril B.

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).