Thread (53 messages) flat view 53 messages, 10 authors, 2019-02-07

Re: [PATCH 17/17] module: Prevent module removal racing with text_poke()

From: Masami Hiramatsu <mhiramat@kernel.org>
Date: 2019-01-18 13:32:58
Also in: linux-integrity, linux-mm, lkml

On Thu, 17 Jan 2019 17:15:27 -0800
Nadav Amit [off-list ref] wrote:
quoted
On Jan 17, 2019, at 3:58 PM, H. Peter Anvin [off-list ref] wrote:

On 1/16/19 11:54 PM, Masami Hiramatsu wrote:
quoted
On Wed, 16 Jan 2019 16:32:59 -0800
Rick Edgecombe [off-list ref] wrote:
quoted
From: Nadav Amit <redacted>

It seems dangerous to allow code modifications to take place
concurrently with module unloading. So take the text_mutex while the
memory of the module is freed.
At that point, since the module itself is removed from module list,
it seems no actual harm. Or would you have any concern?
The issue isn't the module list, but rather when it is safe to free the
contents, so we don't clobber anything. We absolutely need to enforce
that we can't text_poke() something that might have already been freed.

That being said, we *also* really would prefer to enforce that we can't
text_poke() memory that doesn't actually contain code; as far as I can
tell we don't currently do that check.
Yes, that what the mutex was supposed to achieve. It’s not supposed just
to check whether it is a code page, but also that it is the same code
page that you wanted to patch. 
quoted
This, again, is a good use for a separate mm context. We can enforce
that that context will only ever contain valid page mappings for actual
code pages.
This will not tell you that you have the *right* code-page. The module
notifiers help to do so, since they synchronize the text poking with
the module removal.
quoted
(Note: in my proposed algorithm, with a separate mm, replace INVLPG with
switching CR3 if we have to do a rollback or roll forward in the
breakpoint handler.)
I really need to read your patches more carefully to see what you mean.

Anyhow, so what do you prefer? I’m ok with either one:
	1. Keep this patch
	2. Remove this patch and change into a comment on text_poke()
	3. Just drop the patch
I would prefer 2. so at least we should add a comment to text_poke().

Thank you,


-- 
Masami Hiramatsu [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help