Commit dba42580 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: evdev - properly access RCU-protected 'grab' data

We should use rcu_dereference_protected() when checking if given client
is the one that grabbed the device. This fixes warnings produced by
sparse.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent f31ad406
...@@ -180,7 +180,10 @@ static int evdev_grab(struct evdev *evdev, struct evdev_client *client) ...@@ -180,7 +180,10 @@ static int evdev_grab(struct evdev *evdev, struct evdev_client *client)
static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client) static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client)
{ {
if (evdev->grab != client) struct evdev_client *grab = rcu_dereference_protected(evdev->grab,
lockdep_is_held(&evdev->mutex));
if (grab != client)
return -EINVAL; return -EINVAL;
rcu_assign_pointer(evdev->grab, NULL); rcu_assign_pointer(evdev->grab, NULL);
...@@ -259,8 +262,7 @@ static int evdev_release(struct inode *inode, struct file *file) ...@@ -259,8 +262,7 @@ static int evdev_release(struct inode *inode, struct file *file)
struct evdev *evdev = client->evdev; struct evdev *evdev = client->evdev;
mutex_lock(&evdev->mutex); mutex_lock(&evdev->mutex);
if (evdev->grab == client) evdev_ungrab(evdev, client);
evdev_ungrab(evdev, client);
mutex_unlock(&evdev->mutex); mutex_unlock(&evdev->mutex);
evdev_detach_client(evdev, client); evdev_detach_client(evdev, client);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment