linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
@ 2019-02-04 18:33 Alice Ferrazzi
  2019-02-05 12:26 ` Petr Mladek
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Alice Ferrazzi @ 2019-02-04 18:33 UTC (permalink / raw)
  To: jpoimboe, jeyu, jikos, mbenes, pmladek, live-patching, linux-kernel
  Cc: Alice Ferrazzi

From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>

As a result of an unsupported operation is better to use EOPNOTSUPP
as error code.
ENOSYS is only used for 'invalid syscall nr' and nothing else.

Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
---
Changes v1->v2:
- Use EOPNOTSUPP instead of ENOTSUPP (Petr)

 kernel/livepatch/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index fe1993399823..075eb5c0813d 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -1004,7 +1004,7 @@ int klp_enable_patch(struct klp_patch *patch)
 
 	if (!klp_have_reliable_stack()) {
 		pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
-		return -ENOSYS;
+		return -EOPNOTSUPP;
 	}
 
 
-- 
2.19.2


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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-04 18:33 [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS Alice Ferrazzi
@ 2019-02-05 12:26 ` Petr Mladek
  2019-02-05 13:05 ` Miroslav Benes
  2019-02-05 15:59 ` Josh Poimboeuf
  2 siblings, 0 replies; 11+ messages in thread
From: Petr Mladek @ 2019-02-05 12:26 UTC (permalink / raw)
  To: Alice Ferrazzi
  Cc: jpoimboe, jeyu, jikos, mbenes, live-patching, linux-kernel,
	Alice Ferrazzi

On Tue 2019-02-05 03:33:28, Alice Ferrazzi wrote:
> From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> 
> As a result of an unsupported operation is better to use EOPNOTSUPP
> as error code.
> ENOSYS is only used for 'invalid syscall nr' and nothing else.
> 
> Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>

Acked-by: Petr Mladek <pmladek@suse.com>

Best Regards,
Petr

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-04 18:33 [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS Alice Ferrazzi
  2019-02-05 12:26 ` Petr Mladek
@ 2019-02-05 13:05 ` Miroslav Benes
  2019-02-05 15:59 ` Josh Poimboeuf
  2 siblings, 0 replies; 11+ messages in thread
From: Miroslav Benes @ 2019-02-05 13:05 UTC (permalink / raw)
  To: Alice Ferrazzi
  Cc: jpoimboe, jeyu, jikos, pmladek, live-patching, linux-kernel,
	Alice Ferrazzi

On Tue, 5 Feb 2019, Alice Ferrazzi wrote:

> From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> 
> As a result of an unsupported operation is better to use EOPNOTSUPP
> as error code.
> ENOSYS is only used for 'invalid syscall nr' and nothing else.
> 
> Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>

Acked-by: Miroslav Benes <mbenes@suse.cz>

Miroslav

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-04 18:33 [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS Alice Ferrazzi
  2019-02-05 12:26 ` Petr Mladek
  2019-02-05 13:05 ` Miroslav Benes
@ 2019-02-05 15:59 ` Josh Poimboeuf
  2019-02-06 10:28   ` Petr Mladek
  2 siblings, 1 reply; 11+ messages in thread
From: Josh Poimboeuf @ 2019-02-05 15:59 UTC (permalink / raw)
  To: Alice Ferrazzi
  Cc: jeyu, jikos, mbenes, pmladek, live-patching, linux-kernel,
	Alice Ferrazzi

On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> 
> As a result of an unsupported operation is better to use EOPNOTSUPP
> as error code.
> ENOSYS is only used for 'invalid syscall nr' and nothing else.
> 
> Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>

Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>

-- 
Josh

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-05 15:59 ` Josh Poimboeuf
@ 2019-02-06 10:28   ` Petr Mladek
  2019-02-08  6:20     ` Kamalesh Babulal
  0 siblings, 1 reply; 11+ messages in thread
From: Petr Mladek @ 2019-02-06 10:28 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: Alice Ferrazzi, jeyu, jikos, mbenes, live-patching, linux-kernel,
	Alice Ferrazzi

On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > 
> > As a result of an unsupported operation is better to use EOPNOTSUPP
> > as error code.
> > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> > 
> > Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> 
> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>

I have applied the patch into for-5.1/atomic-replace branch.

Best Regards,
Petr

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-06 10:28   ` Petr Mladek
@ 2019-02-08  6:20     ` Kamalesh Babulal
  2019-02-08  9:24       ` Miroslav Benes
  2019-02-08  9:34       ` Petr Mladek
  0 siblings, 2 replies; 11+ messages in thread
From: Kamalesh Babulal @ 2019-02-08  6:20 UTC (permalink / raw)
  To: Petr Mladek
  Cc: Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos, mbenes,
	live-patching, linux-kernel, Alice Ferrazzi

On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > 
> > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > as error code.
> > > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> > > 
> > > Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > 
> > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
> 
> I have applied the patch into for-5.1/atomic-replace branch.

Sorry to jump into the discussion so late. Thinking a little more about
the check itself, previously with immediate flag an architecture can do
livepatching with limitations and without the reliable stack trace
implemented yet.

After removal of the immediate flag by
commit d0807da78e11 ("livepatch: Remove immediate feature"), every
architecture enabling livepatching is required to have implemented
reliable stack trace.  Is it a better idea to make
HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
livepatching support for architectures without reliable stack trace
function during kernel build?

The idea is to remove klp_have_reliable_stack() by moving
CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig file
and adding the other CONFIG_STACKTRACE as a config dependency is not
required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
dependency chain. With the patch on architecture without
HAVE_RELIABLE_STACKTRACE, the user should see:

# insmod ./livepatch-sample.ko 
insmod: ERROR: could not insert module ./livepatch-sample.ko: Invalid module format

# dmesg
...
[  286.453463] livepatch_sample: module is marked as livepatch module, but livepatch support is disabled

I have done limited testing on PowerPC and to test the unsupported case,
the config dependency HAVE_RELIABLE_STACKTRACE was misspelled in Kconfig
file. If the idea sounds ok I will send a formal patch.

-------8<----------------------------

diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h
index 53551f470722..7848c7bbffbb 100644
--- a/include/linux/livepatch.h
+++ b/include/linux/livepatch.h
@@ -214,12 +214,6 @@ static inline bool klp_patch_pending(struct task_struct *task)
        return test_tsk_thread_flag(task, TIF_PATCH_PENDING);
 }
 
-static inline bool klp_have_reliable_stack(void)
-{
-       return IS_ENABLED(CONFIG_STACKTRACE) &&
-              IS_ENABLED(CONFIG_HAVE_RELIABLE_STACKTRACE);
-}
-
 typedef int (*klp_shadow_ctor_t)(void *obj,
                                 void *shadow_data,
                                 void *ctor_data);
diff --git a/kernel/livepatch/Kconfig b/kernel/livepatch/Kconfig
index ec4565122e65..16b3692ddf9f 100644
--- a/kernel/livepatch/Kconfig
+++ b/kernel/livepatch/Kconfig
@@ -9,6 +9,7 @@ config LIVEPATCH
        depends on MODULES
        depends on SYSFS
        depends on KALLSYMS_ALL
+       depends on HAVE_RELIABLE_STACKTRACE
        depends on HAVE_LIVEPATCH
        depends on !TRIM_UNUSED_KSYMS
        help
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index fe1993399823..9a80f7574d75 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -1002,12 +1002,6 @@ int klp_enable_patch(struct klp_patch *patch)
        if (!klp_initialized())
                return -ENODEV;
 
-       if (!klp_have_reliable_stack()) {
-               pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
-               return -ENOSYS;
-       }
-
-
        mutex_lock(&klp_mutex);
 
        ret = klp_init_patch_early(patch);


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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-08  6:20     ` Kamalesh Babulal
@ 2019-02-08  9:24       ` Miroslav Benes
  2019-02-08 13:22         ` Kamalesh Babulal
  2019-02-08  9:34       ` Petr Mladek
  1 sibling, 1 reply; 11+ messages in thread
From: Miroslav Benes @ 2019-02-08  9:24 UTC (permalink / raw)
  To: Kamalesh Babulal
  Cc: Petr Mladek, Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos,
	live-patching, linux-kernel, Alice Ferrazzi

Hi Kamalesh,

On Fri, 8 Feb 2019, Kamalesh Babulal wrote:

> On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> > On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > 
> > > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > > as error code.
> > > > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> > > > 
> > > > Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > 
> > > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
> > 
> > I have applied the patch into for-5.1/atomic-replace branch.
> 
> Sorry to jump into the discussion so late. Thinking a little more about
> the check itself, previously with immediate flag an architecture can do
> livepatching with limitations and without the reliable stack trace
> implemented yet.
> 
> After removal of the immediate flag by
> commit d0807da78e11 ("livepatch: Remove immediate feature"), every
> architecture enabling livepatching is required to have implemented
> reliable stack trace.  Is it a better idea to make
> HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
> livepatching support for architectures without reliable stack trace
> function during kernel build?

if I am not mistaken, s390x is currently the only one which is supported 
(the redirection works) but has no reliable stacktraces (so far, it is my 
plan to take a look soon).

Theoretically, it could still work. We have the fake signal and we can 
force the remaining tasks (kthreads). It is not something to be used in 
production but it could make sense for a limited testing.
 
> The idea is to remove klp_have_reliable_stack() by moving
> CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig file
> and adding the other CONFIG_STACKTRACE as a config dependency is not
> required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
> dependency chain. With the patch on architecture without
> HAVE_RELIABLE_STACKTRACE, the user should see:
> 
> # insmod ./livepatch-sample.ko 
> insmod: ERROR: could not insert module ./livepatch-sample.ko: Invalid module format
> 
> # dmesg
> ...
> [  286.453463] livepatch_sample: module is marked as livepatch module, but livepatch support is disabled
> 
> I have done limited testing on PowerPC and to test the unsupported case,
> the config dependency HAVE_RELIABLE_STACKTRACE was misspelled in Kconfig
> file. If the idea sounds ok I will send a formal patch.
> 
> -------8<----------------------------
> 
> diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h
> index 53551f470722..7848c7bbffbb 100644
> --- a/include/linux/livepatch.h
> +++ b/include/linux/livepatch.h
> @@ -214,12 +214,6 @@ static inline bool klp_patch_pending(struct task_struct *task)
>         return test_tsk_thread_flag(task, TIF_PATCH_PENDING);
>  }
>  
> -static inline bool klp_have_reliable_stack(void)
> -{
> -       return IS_ENABLED(CONFIG_STACKTRACE) &&
> -              IS_ENABLED(CONFIG_HAVE_RELIABLE_STACKTRACE);
> -}
> -
>  typedef int (*klp_shadow_ctor_t)(void *obj,
>                                  void *shadow_data,
>                                  void *ctor_data);
> diff --git a/kernel/livepatch/Kconfig b/kernel/livepatch/Kconfig
> index ec4565122e65..16b3692ddf9f 100644
> --- a/kernel/livepatch/Kconfig
> +++ b/kernel/livepatch/Kconfig
> @@ -9,6 +9,7 @@ config LIVEPATCH
>         depends on MODULES
>         depends on SYSFS
>         depends on KALLSYMS_ALL
> +       depends on HAVE_RELIABLE_STACKTRACE
>         depends on HAVE_LIVEPATCH
>         depends on !TRIM_UNUSED_KSYMS
>         help
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index fe1993399823..9a80f7574d75 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -1002,12 +1002,6 @@ int klp_enable_patch(struct klp_patch *patch)
>         if (!klp_initialized())
>                 return -ENODEV;
>  
> -       if (!klp_have_reliable_stack()) {
> -               pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
> -               return -ENOSYS;
> -       }
> -
> -
>         mutex_lock(&klp_mutex);
>  
>         ret = klp_init_patch_early(patch);

On the other hand, I like this change. So we have two options, I think. 
We can apply this and wait if someone complains (because of s390x 
testing), or we can wait for the full support of s390x and then enforce 
it.

Thanks,
Miroslav

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-08  6:20     ` Kamalesh Babulal
  2019-02-08  9:24       ` Miroslav Benes
@ 2019-02-08  9:34       ` Petr Mladek
  2019-02-08 14:13         ` Kamalesh Babulal
  1 sibling, 1 reply; 11+ messages in thread
From: Petr Mladek @ 2019-02-08  9:34 UTC (permalink / raw)
  To: Kamalesh Babulal
  Cc: Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos, mbenes,
	live-patching, linux-kernel, Alice Ferrazzi

On Fri 2019-02-08 11:50:05, Kamalesh Babulal wrote:
> On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> > On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > 
> > > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > > as error code.
> > > > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> > > > 
> > > > Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > 
> > > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
> > 
> > I have applied the patch into for-5.1/atomic-replace branch.
> 
> Sorry to jump into the discussion so late. Thinking a little more about
> the check itself, previously with immediate flag an architecture can do
> livepatching with limitations and without the reliable stack trace
> implemented yet.
> 
> After removal of the immediate flag by
> commit d0807da78e11 ("livepatch: Remove immediate feature"), every
> architecture enabling livepatching is required to have implemented
> reliable stack trace.  Is it a better idea to make
> HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
> livepatching support for architectures without reliable stack trace
> function during kernel build?
> 
> The idea is to remove klp_have_reliable_stack() by moving
> CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig
> file

Looks like a nice cleanup.

> and adding the other CONFIG_STACKTRACE as a config dependency is not
> required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
> dependency chain. With the patch on architecture without
> HAVE_RELIABLE_STACKTRACE, the user should see:

Hmm, I see the following in kernel/trace/Kconfig:

config TRACING
[...]
	select STACKTRACE if STACKTRACE_SUPPORT

It seems that the depency is not guaranted. Or do I miss anything?

Anyway, it is pretty indirect. I would prefer to add dependency
on STACKTRACE explicitly into config LIVEPATCH.

Best Regards,
Petr

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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-08  9:24       ` Miroslav Benes
@ 2019-02-08 13:22         ` Kamalesh Babulal
  2019-02-08 15:35           ` Miroslav Benes
  0 siblings, 1 reply; 11+ messages in thread
From: Kamalesh Babulal @ 2019-02-08 13:22 UTC (permalink / raw)
  To: Miroslav Benes
  Cc: Petr Mladek, Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos,
	live-patching, linux-kernel, Alice Ferrazzi

Hi Miroslav,

On Fri, Feb 08, 2019 at 10:24:21AM +0100, Miroslav Benes wrote:
> Hi Kamalesh,
> 
> On Fri, 8 Feb 2019, Kamalesh Babulal wrote:
> 
> > On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> > > On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > > > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > > 
> > > > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > > > as error code.
> > > > > ENOSYS is only used for 'invalid syscall nr' and nothing else.

[...]

> > After removal of the immediate flag by
> > commit d0807da78e11 ("livepatch: Remove immediate feature"), every
> > architecture enabling livepatching is required to have implemented
> > reliable stack trace.  Is it a better idea to make
> > HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
> > livepatching support for architectures without reliable stack trace
> > function during kernel build?
> 
> if I am not mistaken, s390x is currently the only one which is supported 
> (the redirection works) but has no reliable stacktraces (so far, it is my 
> plan to take a look soon).
> 
> Theoretically, it could still work. We have the fake signal and we can 
> force the remaining tasks (kthreads). It is not something to be used in 
> production but it could make sense for a limited testing.

That was my understanding too, s390 doesn't set HAVE_RELIABLE_STACKTRACE.

(below output is right trimmed for readability)

arch $ find . -name 'Kconfig'|xargs egrep -an "HAVE_LIVEPATCH"                                                                                                                                                                               
./powerpc/Kconfig:209:  select HAVE_LIVEPATCH ...
./x86/Kconfig:171:      select HAVE_LIVEPATCH ...
./s390/Kconfig:161:     select HAVE_LIVEPATCH

arch $ find . -name 'Kconfig'|xargs egrep -an "HAVE_RELIABLE_STACKTRACE"                                                                                                                                                                     
./powerpc/Kconfig:223:  select HAVE_RELIABLE_STACKTRACE ...
./x86/Kconfig:189:      select HAVE_RELIABLE_STACKTRACE ...
./Kconfig:690:config HAVE_RELIABLE_STACKTRACE

klp_have_reliable_stack() will guard against loading of livepatching
module on s390, for the same reason being that HAVE_RELIABLE_STACKTRACE
is not set. My explanation is purely based on the above grep output
on Kconfig files, which might be partial. Am I missing something here?

> > The idea is to remove klp_have_reliable_stack() by moving
> > CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig file
> > and adding the other CONFIG_STACKTRACE as a config dependency is not
> > required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
> > dependency chain. With the patch on architecture without
> > HAVE_RELIABLE_STACKTRACE, the user should see:

[...]

> > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> > index fe1993399823..9a80f7574d75 100644
> > --- a/kernel/livepatch/core.c
> > +++ b/kernel/livepatch/core.c
> > @@ -1002,12 +1002,6 @@ int klp_enable_patch(struct klp_patch *patch)
> >         if (!klp_initialized())
> >                 return -ENODEV;
> >  
> > -       if (!klp_have_reliable_stack()) {
> > -               pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
> > -               return -ENOSYS;
> > -       }
> > -
> > -
> >         mutex_lock(&klp_mutex);
> >  
> >         ret = klp_init_patch_early(patch);
> 
> On the other hand, I like this change. So we have two options, I think. 
> We can apply this and wait if someone complains (because of s390x 
> testing), or we can wait for the full support of s390x and then enforce 
> it.

Thanks, I am ok with either of the options.  We could enforce the config
dependency, in case the above assumption in regard to s390 is correct.

Thanks,
Kamalesh


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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-08  9:34       ` Petr Mladek
@ 2019-02-08 14:13         ` Kamalesh Babulal
  0 siblings, 0 replies; 11+ messages in thread
From: Kamalesh Babulal @ 2019-02-08 14:13 UTC (permalink / raw)
  To: Petr Mladek
  Cc: Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos, mbenes,
	live-patching, linux-kernel, Alice Ferrazzi

On Fri, Feb 08, 2019 at 10:34:45AM +0100, Petr Mladek wrote:
> On Fri 2019-02-08 11:50:05, Kamalesh Babulal wrote:
> > On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> > > On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > > > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > > 
> > > > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > > > as error code.
> > > > > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> > > > > 
> > > > > Signed-off-by: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > 
> > > > Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
> > > 
> > > I have applied the patch into for-5.1/atomic-replace branch.

[...]

> > After removal of the immediate flag by
> > commit d0807da78e11 ("livepatch: Remove immediate feature"), every
> > architecture enabling livepatching is required to have implemented
> > reliable stack trace.  Is it a better idea to make
> > HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
> > livepatching support for architectures without reliable stack trace
> > function during kernel build?
> > 
> > The idea is to remove klp_have_reliable_stack() by moving
> > CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig
> > file
> 
> Looks like a nice cleanup.

Thanks

> 
> > and adding the other CONFIG_STACKTRACE as a config dependency is not
> > required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
> > dependency chain. With the patch on architecture without
> > HAVE_RELIABLE_STACKTRACE, the user should see:
> 
> Hmm, I see the following in kernel/trace/Kconfig:
> 
> config TRACING
> [...]
> 	select STACKTRACE if STACKTRACE_SUPPORT
> 
> It seems that the depency is not guaranted. Or do I miss anything?

I should have tried drawing the config dependency of CONFIG_STACKTRACE
in the mail.  It would saved me from nagivating wrong indirections in
tricky Kconfigs. You are right, CONFIG_STACKTRACE is not selected via
CONFIG_DYNAMIC_FTRACE_WITH_REGS config dependency chain.

> 
> Anyway, it is pretty indirect. I would prefer to add dependency
> on STACKTRACE explicitly into config LIVEPATCH.

Agree, explicitly listing CONFIG_STACKTRACE as one of the dependencies
under config LIVEPATCH will guarantee the dependency is met.  On the
curious note, digging through the git logs, CONFIG_STACKTRACE_SUPPORT
is enabled by default on x86/PowerPC for quite long now.

Thanks,
Kamalesh


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

* Re: [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS
  2019-02-08 13:22         ` Kamalesh Babulal
@ 2019-02-08 15:35           ` Miroslav Benes
  0 siblings, 0 replies; 11+ messages in thread
From: Miroslav Benes @ 2019-02-08 15:35 UTC (permalink / raw)
  To: Kamalesh Babulal
  Cc: Petr Mladek, Josh Poimboeuf, Alice Ferrazzi, jeyu, jikos,
	live-patching, linux-kernel, Alice Ferrazzi

On Fri, 8 Feb 2019, Kamalesh Babulal wrote:

> Hi Miroslav,
> 
> On Fri, Feb 08, 2019 at 10:24:21AM +0100, Miroslav Benes wrote:
> > Hi Kamalesh,
> > 
> > On Fri, 8 Feb 2019, Kamalesh Babulal wrote:
> > 
> > > On Wed, Feb 06, 2019 at 11:28:32AM +0100, Petr Mladek wrote:
> > > > On Tue 2019-02-05 09:59:33, Josh Poimboeuf wrote:
> > > > > On Tue, Feb 05, 2019 at 03:33:28AM +0900, Alice Ferrazzi wrote:
> > > > > > From: Alice Ferrazzi <alice.ferrazzi@miraclelinux.com>
> > > > > > 
> > > > > > As a result of an unsupported operation is better to use EOPNOTSUPP
> > > > > > as error code.
> > > > > > ENOSYS is only used for 'invalid syscall nr' and nothing else.
> 
> [...]
> 
> > > After removal of the immediate flag by
> > > commit d0807da78e11 ("livepatch: Remove immediate feature"), every
> > > architecture enabling livepatching is required to have implemented
> > > reliable stack trace.  Is it a better idea to make
> > > HAVE_RELIABLE_STACKTRACE a config dependency, which will disable
> > > livepatching support for architectures without reliable stack trace
> > > function during kernel build?
> > 
> > if I am not mistaken, s390x is currently the only one which is supported 
> > (the redirection works) but has no reliable stacktraces (so far, it is my 
> > plan to take a look soon).
> > 
> > Theoretically, it could still work. We have the fake signal and we can 
> > force the remaining tasks (kthreads). It is not something to be used in 
> > production but it could make sense for a limited testing.
> 
> That was my understanding too, s390 doesn't set HAVE_RELIABLE_STACKTRACE.
> 
> (below output is right trimmed for readability)
> 
> arch $ find . -name 'Kconfig'|xargs egrep -an "HAVE_LIVEPATCH"                                                                                                                                                                               
> ./powerpc/Kconfig:209:  select HAVE_LIVEPATCH ...
> ./x86/Kconfig:171:      select HAVE_LIVEPATCH ...
> ./s390/Kconfig:161:     select HAVE_LIVEPATCH
> 
> arch $ find . -name 'Kconfig'|xargs egrep -an "HAVE_RELIABLE_STACKTRACE"                                                                                                                                                                     
> ./powerpc/Kconfig:223:  select HAVE_RELIABLE_STACKTRACE ...
> ./x86/Kconfig:189:      select HAVE_RELIABLE_STACKTRACE ...
> ./Kconfig:690:config HAVE_RELIABLE_STACKTRACE
> 
> klp_have_reliable_stack() will guard against loading of livepatching
> module on s390, for the same reason being that HAVE_RELIABLE_STACKTRACE
> is not set. My explanation is purely based on the above grep output
> on Kconfig files, which might be partial. Am I missing something here?

No, I don't think so.

I think I mentioned the theoretical possibility at the time the check was 
introduced and we came to the conclusion that it is worth it and we should 
enforce the reliable stacktraces.
 
> > > The idea is to remove klp_have_reliable_stack() by moving
> > > CONFIG_HAVE_RELIABLE_STACKTRACE as a config dependency to Kconfig file
> > > and adding the other CONFIG_STACKTRACE as a config dependency is not
> > > required, as it's selected via CONFIG_DYNAMIC_FTRACE_WITH_REGS
> > > dependency chain. With the patch on architecture without
> > > HAVE_RELIABLE_STACKTRACE, the user should see:
> 
> [...]
> 
> > > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> > > index fe1993399823..9a80f7574d75 100644
> > > --- a/kernel/livepatch/core.c
> > > +++ b/kernel/livepatch/core.c
> > > @@ -1002,12 +1002,6 @@ int klp_enable_patch(struct klp_patch *patch)
> > >         if (!klp_initialized())
> > >                 return -ENODEV;
> > >  
> > > -       if (!klp_have_reliable_stack()) {
> > > -               pr_err("This architecture doesn't have support for the livepatch consistency model.\n");
> > > -               return -ENOSYS;
> > > -       }
> > > -
> > > -
> > >         mutex_lock(&klp_mutex);
> > >  
> > >         ret = klp_init_patch_early(patch);
> > 
> > On the other hand, I like this change. So we have two options, I think. 
> > We can apply this and wait if someone complains (because of s390x 
> > testing), or we can wait for the full support of s390x and then enforce 
> > it.

Scratch this. It is enforced even now.
 
> Thanks, I am ok with either of the options.  We could enforce the config
> dependency, in case the above assumption in regard to s390 is correct.

Yes, I think it is a nice cleanup.

Miroslav

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

end of thread, other threads:[~2019-02-08 15:35 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-04 18:33 [PATCH v2] livepatch: core: Return EOPNOTSUPP instead of ENOSYS Alice Ferrazzi
2019-02-05 12:26 ` Petr Mladek
2019-02-05 13:05 ` Miroslav Benes
2019-02-05 15:59 ` Josh Poimboeuf
2019-02-06 10:28   ` Petr Mladek
2019-02-08  6:20     ` Kamalesh Babulal
2019-02-08  9:24       ` Miroslav Benes
2019-02-08 13:22         ` Kamalesh Babulal
2019-02-08 15:35           ` Miroslav Benes
2019-02-08  9:34       ` Petr Mladek
2019-02-08 14:13         ` Kamalesh Babulal

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).