Messages in this thread | | | Date | Mon, 2 Mar 2015 10:21:35 +0100 | From | Petr Mladek <> | Subject | Re: [RFC][PATCH 1/9] klp: Fix obvious RCU fail |
| |
On Mon 2015-03-02 09:35:30, Peter Zijlstra wrote: > On Sun, Mar 01, 2015 at 09:09:24PM +0100, Jiri Kosina wrote: > > On Sat, 28 Feb 2015, Peter Zijlstra wrote: > > > > > While one must hold RCU-sched (aka. preempt_disable) for find_symbol() > > > one must equally hold it over the use of the object returned. > > > > > > The moment you release the RCU-sched read lock, the object can be dead > > > and gone. > > > > > > Cc: Seth Jennings <sjenning@redhat.com> > > > Cc: Josh Poimboeuf <jpoimboe@redhat.com> > > > Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> > > > Cc: Miroslav Benes <mbenes@suse.cz> > > > Cc: Petr Mladek <pmladek@suse.cz> > > > Cc: Jiri Kosina <jkosina@suse.cz> > > > Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> > > > Cc: Rusty Russell <rusty@rustcorp.com.au> > > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > > > > Acked-by: Jiri Kosina <jkosina@suse.cz> > > > > I guess you'll be taking this together with the series, so I am not > > applying it. > > Feel free to take it; this series might take a wee while longer to > mature. > > That said; I do have a follow up question on that code. So now you've > successfully obtained an address in module space; but the moment you > release that RCU-sched lock, the module can be gone. > > How does the whole live patching stuff deal with module removal during > patching?
There is a notifier, see klp_module_notify(). It applies existing patches when an affected module is loaded. Also it removes patches when an affected module is going. It is serialized with the other operations using the klp_mutex lock.
Hmm, when I think about it. I am afraid that there is a race. For example, the going module might be unpatched by the notifier but a new patch might get applied when it is still visible by kallsyms. I am going to look at it.
Best Regards, Petr
| |