mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] bug fix in kernel/kmod.c
I think there is a bug in kmod.c: In __call_usermodehelper(), when kernel_thread(wait_for_helper, ...) return success, since wait_for_helper() might call complete() at any time, the sub_info should not be used any more. Normally wait_for_helper() take a long time to finish, you may not get problem for most of the case. But if you remove /sbin/modprobe, it may become easier for you to get a oop in khelper. Cc: Matt Helsley <matthltc@us.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
1ab7a1f3b4
commit
e4b69aa2a1
1 changed files with 3 additions and 2 deletions
|
@ -197,11 +197,12 @@ static void __call_usermodehelper(void *data)
|
||||||
{
|
{
|
||||||
struct subprocess_info *sub_info = data;
|
struct subprocess_info *sub_info = data;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
int wait = sub_info->wait;
|
||||||
|
|
||||||
/* CLONE_VFORK: wait until the usermode helper has execve'd
|
/* CLONE_VFORK: wait until the usermode helper has execve'd
|
||||||
* successfully We need the data structures to stay around
|
* successfully We need the data structures to stay around
|
||||||
* until that is done. */
|
* until that is done. */
|
||||||
if (sub_info->wait)
|
if (wait)
|
||||||
pid = kernel_thread(wait_for_helper, sub_info,
|
pid = kernel_thread(wait_for_helper, sub_info,
|
||||||
CLONE_FS | CLONE_FILES | SIGCHLD);
|
CLONE_FS | CLONE_FILES | SIGCHLD);
|
||||||
else
|
else
|
||||||
|
@ -211,7 +212,7 @@ static void __call_usermodehelper(void *data)
|
||||||
if (pid < 0) {
|
if (pid < 0) {
|
||||||
sub_info->retval = pid;
|
sub_info->retval = pid;
|
||||||
complete(sub_info->complete);
|
complete(sub_info->complete);
|
||||||
} else if (!sub_info->wait)
|
} else if (!wait)
|
||||||
complete(sub_info->complete);
|
complete(sub_info->complete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue