From: Masami Hiramatsu <mhiramat@redhat.com>
To: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
ananth@in.ibm.com, David Miller <davem@davemloft.net>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Rusty Russell <rusty@rustcorp.com.au>
Subject: Re: [PATCH] kprobes: disable preempt for module_text_address()
Date: Tue, 04 Nov 2008 20:27:51 -0500 [thread overview]
Message-ID: <4910F697.2050203@redhat.com> (raw)
In-Reply-To: <490FE405.1000105@cn.fujitsu.com>
Hi Lai,
Lai Jiangshan wrote:
> __register_kprobe() may be preempted after module_text_address()
> but before try_module_get(), and in this interval the module may be
> unloaded and try_module_get(probed_mod) will access to invalid address.
> this patch uses preempt_disable() to protect it.
Thank you for your work.
I think this is the problem of module_text_address() because it can
return incorrect address of struct module if a preemption happens.
So, I think the module_text_address() would better to call try_module_get()
before returning its address, or at least they should comment that caller
needs disabling preemption.
struct module *module_text_address(unsigned long addr)
{
struct module *mod;
preempt_disable(); /*
* I also think this preemption disabling is not so useful
* without try_module_get(), because caller have to
* disable preemption...
*/
mod = __module_text_address(addr);
/* here, try_module_get() is needed.
* (or commenting "caller must disable preemption!") */
preempt_enable();
/*
* !!Here!! if the preemption happened, it could return invalid "mod".
* In that case, even if module_text_address() returns non-NULL,
* the addr is no longer in any module.
*/
return mod;
}
Thank you,
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America) Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
next prev parent reply other threads:[~2008-11-05 1:29 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-04 5:56 [PATCH] kprobes: disable preempt for module_text_address() Lai Jiangshan
2008-11-04 14:28 ` Ananth N Mavinakayanahalli
2008-11-05 0:53 ` Lai Jiangshan
2008-11-05 1:27 ` Masami Hiramatsu [this message]
2008-11-05 1:47 ` Lai Jiangshan
2008-11-05 19:30 ` Hiroshi Shimamoto
2008-11-05 21:40 ` Masami Hiramatsu
2008-11-05 22:46 ` Hiroshi Shimamoto
2008-11-05 23:07 ` Masami Hiramatsu
2008-11-06 0:06 ` [PATCH] kprobes: bugfix: try_module_get even if calling_mod is NULL Masami Hiramatsu
2008-11-07 1:00 ` Andrew Morton
2008-11-07 2:28 ` Masami Hiramatsu
2008-11-07 2:54 ` Andrew Morton
2008-11-07 4:46 ` Ananth N Mavinakayanahalli
2008-11-06 1:06 ` [PATCH] kprobes: disable preempt for module_text_address() Lai Jiangshan
2008-11-06 15:37 ` [PATCH] kprobes: disable preempt for module_text_address() and kernel_text_address() Masami Hiramatsu
2008-11-07 0:32 ` Lai Jiangshan
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=4910F697.2050203@redhat.com \
--to=mhiramat@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=ananth@in.ibm.com \
--cc=davem@davemloft.net \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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.