Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dba42580 authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

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
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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)
{
	if (evdev->grab != client)
	struct evdev_client *grab = rcu_dereference_protected(evdev->grab,
					lockdep_is_held(&evdev->mutex));

	if (grab != client)
		return  -EINVAL;

	rcu_assign_pointer(evdev->grab, NULL);
@@ -259,7 +262,6 @@ static int evdev_release(struct inode *inode, struct file *file)
	struct evdev *evdev = client->evdev;

	mutex_lock(&evdev->mutex);
	if (evdev->grab == client)
	evdev_ungrab(evdev, client);
	mutex_unlock(&evdev->mutex);