Input: uinput - don't use "interruptible" in FF code
authorDmitry Torokhov <dtor_core@ameritech.net>
Sun, 20 Nov 2005 05:51:43 +0000 (00:51 -0500)
committerDmitry Torokhov <dtor_core@ameritech.net>
Sun, 20 Nov 2005 05:51:43 +0000 (00:51 -0500)
If thread that submitted FF request gets interrupted somehow it
will release request structure and ioctl handler will work with
freed memory. TO prevent that from happening switch to using
wait_for_completion instead of wait_for_completion_interruptible.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/misc/uinput.c

index 4702ade804ac9ef5c73876a5e2acbc4e648e8797..546ed9b4901df211ae125e5395fc5e0675fc7458 100644 (file)
@@ -92,24 +92,19 @@ static void uinput_request_done(struct uinput_device *udev, struct uinput_reques
 {
        /* Mark slot as available */
        udev->requests[request->id] = NULL;
-       wake_up_interruptible(&udev->requests_waitq);
+       wake_up(&udev->requests_waitq);
 
        complete(&request->done);
 }
 
 static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request)
 {
-       int retval;
-
        /* Tell our userspace app about this new request by queueing an input event */
        uinput_dev_event(dev, EV_UINPUT, request->code, request->id);
 
        /* Wait for the request to complete */
-       retval = wait_for_completion_interruptible(&request->done);
-       if (!retval)
-               retval = request->retval;
-
-       return retval;
+       wait_for_completion(&request->done);
+       return request->retval;
 }
 
 static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect)