summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Steinbrink <B.Steinbrink@gmx.de>2008-03-30 20:42:59 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2008-03-30 14:47:49 -0700
commiteb08b6b973cb91311431c6eea3cc232b97152a84 (patch)
treee5ee937a643f86302abaf72ff1fd09e381d445ec
parentd6e4218e28b75c4701a8c8d12e989de1dc97c182 (diff)
downloadkernel-crypto-eb08b6b973cb91311431c6eea3cc232b97152a84.tar.gz
kernel-crypto-eb08b6b973cb91311431c6eea3cc232b97152a84.tar.xz
kernel-crypto-eb08b6b973cb91311431c6eea3cc232b97152a84.zip
evdev: Release eventual input device grabs when getting disconnected
When getting disconnected we need to release eventual grabs on the underlying input device as we also release the input device itself. Otherwise, we would try to release the grab when the client that requested it closes its handle, accessing the input device which might already be freed. Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/input/evdev.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 0727b0a1255..99562cee827 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -853,6 +853,9 @@ static void evdev_cleanup(struct evdev *evdev)
evdev_hangup(evdev);
evdev_remove_chrdev(evdev);
+ if (evdev->grab)
+ evdev_ungrab(evdev, evdev->grab);
+
/* evdev is marked dead so no one else accesses evdev->open */
if (evdev->open) {
input_flush_device(handle, NULL);