On Tue, 14 Apr 2020, 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@xxxxxxxxxxxxx > > https://lkml.kernel.org/r/20191018074634.858645375@xxxxxxxxxxxxx > > 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. > > 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. Agreed. On the other hand, the first patch would remove the tiny race window when a module state is still UNFORMED, but the protections are (being) set up. Patches 4/7 and 5/7 allow to use memcpy in that case, because it is early. But it is in fact not already. I haven't checked yet if it really matters somewhere (a race with livepatch running klp_module_coming while another module is being loaded or anything like that). Miroslav