提交 ccf40d62 编写于 作者: D Duncan Sands 提交者: Greg Kroah-Hartman

usbatm: fix tiny race

If usbatm_do_heavy_init finishes before usbatm_heavy_init
writes the pid, the disconnect method could shoot down the
wrong process if the pid has been recycled.
Signed-off-by: NDuncan Sands <baldrick@free.fr>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 e4a20daa
...@@ -1001,6 +1001,7 @@ static int usbatm_do_heavy_init(void *arg) ...@@ -1001,6 +1001,7 @@ static int usbatm_do_heavy_init(void *arg)
daemonize(instance->driver->driver_name); daemonize(instance->driver->driver_name);
allow_signal(SIGTERM); allow_signal(SIGTERM);
instance->thread_pid = get_current()->pid;
complete(&instance->thread_started); complete(&instance->thread_started);
...@@ -1025,10 +1026,6 @@ static int usbatm_heavy_init(struct usbatm_data *instance) ...@@ -1025,10 +1026,6 @@ static int usbatm_heavy_init(struct usbatm_data *instance)
return ret; return ret;
} }
mutex_lock(&instance->serialize);
instance->thread_pid = ret;
mutex_unlock(&instance->serialize);
wait_for_completion(&instance->thread_started); wait_for_completion(&instance->thread_started);
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册