From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: live-patching@vger.kernel.org, linux-kernel@vger.kernel.org,
Jessica Yu <jeyu@kernel.org>
Subject: Re: [PATCH 0/7] livepatch,module: Remove .klp.arch and module_disable_ro()
Date: Wed, 15 Apr 2020 16:24:15 +0200 [thread overview]
Message-ID: <20200415142415.GH20730@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20200414190814.glra2gceqgy34iyx@treble>
On Tue, Apr 14, 2020 at 02:08:14PM -0500, Josh Poimboeuf wrote:
> On Tue, Apr 14, 2020 at 08:27:26PM +0200, Peter Zijlstra wrote:
> > On Tue, Apr 14, 2020 at 11:28:36AM -0500, Josh Poimboeuf wrote:
> > > Better late than never, these patches add simplifications and
> > > improvements for some issues Peter found six months ago, as part of his
> > > non-writable text code (W^X) cleanups.
> >
> > Excellent stuff, thanks!!
> >
> > I'll go brush up these two patches then:
> >
> > https://lkml.kernel.org/r/20191018074634.801435443@infradead.org
> > https://lkml.kernel.org/r/20191018074634.858645375@infradead.org
>
> Ah right, I meant to bring that up. I actually played around with those
> patches. While it would be nice to figure out a way to converge the
> ftrace module init, I didn't really like the first patch.
ftrace only needs it done after ftrace_module_enable(), which is before
the notifier chain happens, so we can simply do something like so
instead:
diff --git a/kernel/module.c b/kernel/module.c
index a3a8f6d0e144..89f8d02c3c3e 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -3700,6 +3700,10 @@ static int prepare_coming_module(struct module *mod)
if (err)
return err;
+ module_enable_ro(mod, false);
+ module_enable_nx(mod);
+ module_enable_x(mod);
+
err = blocking_notifier_call_chain_robust(&module_notify_list,
MODULE_STATE_COMING, MODULE_STATE_GOING, mod);
err = notifier_to_errno(err);
@@ -3845,10 +3849,6 @@ static int load_module(struct load_info *info, const char __user *uargs,
if (err)
goto bug_cleanup;
- module_enable_ro(mod, false);
- module_enable_nx(mod);
- module_enable_x(mod);
-
/* Module is ready to execute: parsing args may do that. */
after_dashes = parse_args(mod->name, mod->args, mod->kp, mod->num_kp,
-32768, 32767, mod,
> It bothers me that both the notifiers and the module init() both see the
> same MODULE_STATE_COMING state, but only in the former case is the text
> writable.
>
> I think it's cognitively simpler if MODULE_STATE_COMING always means the
> same thing, like the comments imply, "fully formed" and thus
> not-writable:
>
> enum module_state {
> MODULE_STATE_LIVE, /* Normal state. */
> MODULE_STATE_COMING, /* Full formed, running module_init. */
> MODULE_STATE_GOING, /* Going away. */
> MODULE_STATE_UNFORMED, /* Still setting it up. */
> };
>
> And, it keeps tighter constraints on what a notifier can do, which is a
> good thing if we can get away with it.
Moo! -- but jump_label and static_call are on the notifier chain and I
was hoping to make it cheaper for them. Should we perhaps weane them off the
notifier and, like ftrace/klp put in explicit calls?
It'd make the error handling in prepare_coming_module() a bigger mess,
but it should work.
next prev parent reply other threads:[~2020-04-15 14:24 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-14 16:28 [PATCH 0/7] livepatch,module: Remove .klp.arch and module_disable_ro() Josh Poimboeuf
2020-04-14 16:28 ` [PATCH 1/7] livepatch: Apply vmlinux-specific KLP relocations early Josh Poimboeuf
2020-04-14 17:44 ` Peter Zijlstra
2020-04-14 18:01 ` Josh Poimboeuf
2020-04-14 19:31 ` Josh Poimboeuf
2020-04-15 14:30 ` Miroslav Benes
2020-04-15 16:29 ` Josh Poimboeuf
2020-04-15 14:34 ` Miroslav Benes
2020-04-15 16:30 ` Josh Poimboeuf
2020-04-14 16:28 ` [PATCH 2/7] livepatch: Remove .klp.arch Josh Poimboeuf
2020-04-15 15:18 ` Jessica Yu
2020-04-14 16:28 ` [PATCH 3/7] livepatch: Prevent module-specific KLP rela sections from referencing vmlinux symbols Josh Poimboeuf
2020-04-14 16:28 ` [PATCH 4/7] s390/module: Use s390_kernel_write() for relocations Josh Poimboeuf
2020-04-16 8:56 ` Miroslav Benes
2020-04-16 12:06 ` Josh Poimboeuf
2020-04-16 13:16 ` Josh Poimboeuf
2020-04-17 1:37 ` Josh Poimboeuf
2020-04-23 7:33 ` kbuild test robot
2020-04-14 16:28 ` [PATCH 5/7] x86/module: Use text_poke() " Josh Poimboeuf
2020-04-14 16:28 ` [PATCH 6/7] livepatch: Remove module_disable_ro() usage Josh Poimboeuf
2020-04-15 15:02 ` Jessica Yu
2020-04-15 16:33 ` Josh Poimboeuf
2020-04-16 9:28 ` Miroslav Benes
2020-04-16 12:10 ` Josh Poimboeuf
2020-04-14 16:28 ` [PATCH 7/7] module: Remove module_disable_ro() Josh Poimboeuf
2020-04-14 18:27 ` [PATCH 0/7] livepatch,module: Remove .klp.arch and module_disable_ro() Peter Zijlstra
2020-04-14 19:08 ` Josh Poimboeuf
2020-04-15 14:24 ` Peter Zijlstra [this message]
2020-04-15 16:17 ` Josh Poimboeuf
2020-04-16 15:31 ` Jessica Yu
2020-04-16 15:45 ` Josh Poimboeuf
2020-04-17 8:27 ` Miroslav Benes
2020-04-17 8:50 ` Jessica Yu
2020-04-16 9:45 ` Miroslav Benes
2020-04-16 12:20 ` Josh Poimboeuf
2020-04-17 9:08 ` Miroslav Benes
2020-04-15 0:57 ` Joe Lawrence
2020-04-15 1:31 ` Josh Poimboeuf
2020-04-15 1:37 ` Joe Lawrence
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200415142415.GH20730@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=jeyu@kernel.org \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.