From: Oleg Nesterov usbatm_do_heavy_init() calls allow_signal() which plays with parent process's ->sighand. Signed-off-by: Oleg Nesterov Acked-by: Duncan Sands Cc: Greg KH Signed-off-by: Andrew Morton --- drivers/usb/atm/usbatm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/usb/atm/usbatm.c~usbatm_heavy_init-dont-use-clone_sighand drivers/usb/atm/usbatm.c --- a/drivers/usb/atm/usbatm.c~usbatm_heavy_init-dont-use-clone_sighand +++ a/drivers/usb/atm/usbatm.c @@ -1033,7 +1033,7 @@ static int usbatm_do_heavy_init(void *ar static int usbatm_heavy_init(struct usbatm_data *instance) { - int ret = kernel_thread(usbatm_do_heavy_init, instance, CLONE_KERNEL); + int ret = kernel_thread(usbatm_do_heavy_init, instance, CLONE_FS | CLONE_FILES); if (ret < 0) { usb_err(instance, "%s: failed to create kernel_thread (%d)!\n", __func__, ret); _