diff options
author | Duncan Sands <baldrick@free.fr> | 2006-10-05 03:56:44 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-10-17 17:46:31 -0400 |
commit | ccf40d62c70128990cf2e8775853cc3287cd7ce3 (patch) | |
tree | 1f9ee5f3da100404be153f6d2a563b682d3f2ecc /drivers/usb/atm | |
parent | e4a20daa7b44ab9805979eb716f6bb7532bc67b9 (diff) |
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: Duncan Sands <baldrick@free.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/atm')
-rw-r--r-- | drivers/usb/atm/usbatm.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/usb/atm/usbatm.c b/drivers/usb/atm/usbatm.c index 309073f6433a..ab091fa4c86b 100644 --- a/drivers/usb/atm/usbatm.c +++ b/drivers/usb/atm/usbatm.c | |||
@@ -1001,6 +1001,7 @@ static int usbatm_do_heavy_init(void *arg) | |||
1001 | 1001 | ||
1002 | daemonize(instance->driver->driver_name); | 1002 | daemonize(instance->driver->driver_name); |
1003 | allow_signal(SIGTERM); | 1003 | allow_signal(SIGTERM); |
1004 | instance->thread_pid = get_current()->pid; | ||
1004 | 1005 | ||
1005 | complete(&instance->thread_started); | 1006 | complete(&instance->thread_started); |
1006 | 1007 | ||
@@ -1025,10 +1026,6 @@ static int usbatm_heavy_init(struct usbatm_data *instance) | |||
1025 | return ret; | 1026 | return ret; |
1026 | } | 1027 | } |
1027 | 1028 | ||
1028 | mutex_lock(&instance->serialize); | ||
1029 | instance->thread_pid = ret; | ||
1030 | mutex_unlock(&instance->serialize); | ||
1031 | |||
1032 | wait_for_completion(&instance->thread_started); | 1029 | wait_for_completion(&instance->thread_started); |
1033 | 1030 | ||
1034 | return 0; | 1031 | return 0; |