evdev.c 28.0 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * Event char devices, giving access to raw input device events.
 *
 * Copyright (c) 1999-2002 Vojtech Pavlik
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */

J
Joe Perches 已提交
11 12
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

L
Linus Torvalds 已提交
13 14
#define EVDEV_MINOR_BASE	64
#define EVDEV_MINORS		32
15 16
#define EVDEV_MIN_BUFFER_SIZE	64U
#define EVDEV_BUF_PACKETS	8
L
Linus Torvalds 已提交
17 18

#include <linux/poll.h>
19
#include <linux/sched.h>
L
Linus Torvalds 已提交
20
#include <linux/slab.h>
21 22
#include <linux/vmalloc.h>
#include <linux/mm.h>
L
Linus Torvalds 已提交
23 24
#include <linux/module.h>
#include <linux/init.h>
25
#include <linux/input/mt.h>
L
Linus Torvalds 已提交
26 27
#include <linux/major.h>
#include <linux/device.h>
28
#include <linux/cdev.h>
29
#include "input-compat.h"
L
Linus Torvalds 已提交
30 31 32 33 34

struct evdev {
	int open;
	struct input_handle handle;
	wait_queue_head_t wait;
A
Arnd Bergmann 已提交
35
	struct evdev_client __rcu *grab;
36
	struct list_head client_list;
37 38
	spinlock_t client_lock; /* protects client_list */
	struct mutex mutex;
39
	struct device dev;
40
	struct cdev cdev;
41
	bool exist;
L
Linus Torvalds 已提交
42 43
};

44
struct evdev_client {
45 46
	unsigned int head;
	unsigned int tail;
47
	unsigned int packet_head; /* [future] position of the first element of next packet */
48
	spinlock_t buffer_lock; /* protects access to buffer, head and tail */
L
Linus Torvalds 已提交
49 50 51
	struct fasync_struct *fasync;
	struct evdev *evdev;
	struct list_head node;
52
	int clkid;
53
	bool revoked;
54
	unsigned int bufsize;
55
	struct input_event buffer[];
L
Linus Torvalds 已提交
56 57
};

58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
/* flush queued events of type @type, caller must hold client->buffer_lock */
static void __evdev_flush_queue(struct evdev_client *client, unsigned int type)
{
	unsigned int i, head, num;
	unsigned int mask = client->bufsize - 1;
	bool is_report;
	struct input_event *ev;

	BUG_ON(type == EV_SYN);

	head = client->tail;
	client->packet_head = client->tail;

	/* init to 1 so a leading SYN_REPORT will not be dropped */
	num = 1;

	for (i = client->tail; i != client->head; i = (i + 1) & mask) {
		ev = &client->buffer[i];
		is_report = ev->type == EV_SYN && ev->code == SYN_REPORT;

		if (ev->type == type) {
			/* drop matched entry */
			continue;
		} else if (is_report && !num) {
			/* drop empty SYN_REPORT groups */
			continue;
		} else if (head != i) {
			/* move entry to fill the gap */
			client->buffer[head].time = ev->time;
			client->buffer[head].type = ev->type;
			client->buffer[head].code = ev->code;
			client->buffer[head].value = ev->value;
		}

		num++;
		head = (head + 1) & mask;

		if (is_report) {
			num = 0;
			client->packet_head = head;
		}
	}

	client->head = head;
}

/* queue SYN_DROPPED event */
static void evdev_queue_syn_dropped(struct evdev_client *client)
{
	unsigned long flags;
	struct input_event ev;
	ktime_t time;

	time = ktime_get();
	if (client->clkid != CLOCK_MONOTONIC)
		time = ktime_sub(time, ktime_get_monotonic_offset());

	ev.time = ktime_to_timeval(time);
	ev.type = EV_SYN;
	ev.code = SYN_DROPPED;
	ev.value = 0;

	spin_lock_irqsave(&client->buffer_lock, flags);

	client->buffer[client->head++] = ev;
	client->head &= client->bufsize - 1;

	if (unlikely(client->head == client->tail)) {
		/* drop queue but keep our SYN_DROPPED event */
		client->tail = (client->head - 1) & (client->bufsize - 1);
		client->packet_head = client->tail;
	}

	spin_unlock_irqrestore(&client->buffer_lock, flags);
}

134 135
static void __pass_event(struct evdev_client *client,
			 const struct input_event *event)
136
{
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
	client->buffer[client->head++] = *event;
	client->head &= client->bufsize - 1;

	if (unlikely(client->head == client->tail)) {
		/*
		 * This effectively "drops" all unconsumed events, leaving
		 * EV_SYN/SYN_DROPPED plus the newest event in the queue.
		 */
		client->tail = (client->head - 2) & (client->bufsize - 1);

		client->buffer[client->tail].time = event->time;
		client->buffer[client->tail].type = EV_SYN;
		client->buffer[client->tail].code = SYN_DROPPED;
		client->buffer[client->tail].value = 0;

152 153
		client->packet_head = client->tail;
	}
154

155 156
	if (event->type == EV_SYN && event->code == SYN_REPORT) {
		client->packet_head = client->head;
157
		kill_fasync(&client->fasync, SIGIO, POLL_IN);
158
	}
159 160 161 162 163 164 165 166 167 168 169
}

static void evdev_pass_values(struct evdev_client *client,
			const struct input_value *vals, unsigned int count,
			ktime_t mono, ktime_t real)
{
	struct evdev *evdev = client->evdev;
	const struct input_value *v;
	struct input_event event;
	bool wakeup = false;

170 171 172
	if (client->revoked)
		return;

173 174 175 176 177 178 179 180 181 182 183 184 185 186
	event.time = ktime_to_timeval(client->clkid == CLOCK_MONOTONIC ?
				      mono : real);

	/* Interrupts are disabled, just acquire the lock. */
	spin_lock(&client->buffer_lock);

	for (v = vals; v != vals + count; v++) {
		event.type = v->type;
		event.code = v->code;
		event.value = v->value;
		__pass_event(client, &event);
		if (v->type == EV_SYN && v->code == SYN_REPORT)
			wakeup = true;
	}
187 188

	spin_unlock(&client->buffer_lock);
189 190 191

	if (wakeup)
		wake_up_interruptible(&evdev->wait);
192 193 194
}

/*
195
 * Pass incoming events to all connected clients.
196
 */
197 198
static void evdev_events(struct input_handle *handle,
			 const struct input_value *vals, unsigned int count)
L
Linus Torvalds 已提交
199 200
{
	struct evdev *evdev = handle->private;
201
	struct evdev_client *client;
202 203 204 205
	ktime_t time_mono, time_real;

	time_mono = ktime_get();
	time_real = ktime_sub(time_mono, ktime_get_monotonic_offset());
L
Linus Torvalds 已提交
206

D
Dmitry Torokhov 已提交
207 208
	rcu_read_lock();

209
	client = rcu_dereference(evdev->grab);
210

211
	if (client)
212
		evdev_pass_values(client, vals, count, time_mono, time_real);
213 214
	else
		list_for_each_entry_rcu(client, &evdev->client_list, node)
215 216
			evdev_pass_values(client, vals, count,
					  time_mono, time_real);
L
Linus Torvalds 已提交
217

D
Dmitry Torokhov 已提交
218
	rcu_read_unlock();
219
}
D
Dmitry Torokhov 已提交
220

221 222 223 224 225 226 227 228 229
/*
 * Pass incoming event to all connected clients.
 */
static void evdev_event(struct input_handle *handle,
			unsigned int type, unsigned int code, int value)
{
	struct input_value vals[] = { { type, code, value } };

	evdev_events(handle, vals, 1);
L
Linus Torvalds 已提交
230 231 232 233
}

static int evdev_fasync(int fd, struct file *file, int on)
{
234
	struct evdev_client *client = file->private_data;
235

236
	return fasync_helper(fd, file, on, &client->fasync);
L
Linus Torvalds 已提交
237 238
}

239
static int evdev_flush(struct file *file, fl_owner_t id)
L
Linus Torvalds 已提交
240
{
241 242
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
243 244 245 246 247
	int retval;

	retval = mutex_lock_interruptible(&evdev->mutex);
	if (retval)
		return retval;
248

249
	if (!evdev->exist || client->revoked)
250 251 252
		retval = -ENODEV;
	else
		retval = input_flush_device(&evdev->handle, file);
253

254 255
	mutex_unlock(&evdev->mutex);
	return retval;
L
Linus Torvalds 已提交
256 257
}

258
static void evdev_free(struct device *dev)
L
Linus Torvalds 已提交
259
{
260 261
	struct evdev *evdev = container_of(dev, struct evdev, dev);

262
	input_put_device(evdev->handle.dev);
L
Linus Torvalds 已提交
263 264 265
	kfree(evdev);
}

266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
/*
 * Grabs an event device (along with underlying input device).
 * This function is called with evdev->mutex taken.
 */
static int evdev_grab(struct evdev *evdev, struct evdev_client *client)
{
	int error;

	if (evdev->grab)
		return -EBUSY;

	error = input_grab_device(&evdev->handle);
	if (error)
		return error;

	rcu_assign_pointer(evdev->grab, client);

	return 0;
}

static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client)
{
288 289 290 291
	struct evdev_client *grab = rcu_dereference_protected(evdev->grab,
					lockdep_is_held(&evdev->mutex));

	if (grab != client)
292 293 294
		return  -EINVAL;

	rcu_assign_pointer(evdev->grab, NULL);
D
Dmitry Torokhov 已提交
295
	synchronize_rcu();
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
	input_release_device(&evdev->handle);

	return 0;
}

static void evdev_attach_client(struct evdev *evdev,
				struct evdev_client *client)
{
	spin_lock(&evdev->client_lock);
	list_add_tail_rcu(&client->node, &evdev->client_list);
	spin_unlock(&evdev->client_lock);
}

static void evdev_detach_client(struct evdev *evdev,
				struct evdev_client *client)
{
	spin_lock(&evdev->client_lock);
	list_del_rcu(&client->node);
	spin_unlock(&evdev->client_lock);
D
Dmitry Torokhov 已提交
315
	synchronize_rcu();
316 317 318 319 320 321 322 323 324 325 326 327
}

static int evdev_open_device(struct evdev *evdev)
{
	int retval;

	retval = mutex_lock_interruptible(&evdev->mutex);
	if (retval)
		return retval;

	if (!evdev->exist)
		retval = -ENODEV;
328
	else if (!evdev->open++) {
329
		retval = input_open_device(&evdev->handle);
330 331 332
		if (retval)
			evdev->open--;
	}
333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363

	mutex_unlock(&evdev->mutex);
	return retval;
}

static void evdev_close_device(struct evdev *evdev)
{
	mutex_lock(&evdev->mutex);

	if (evdev->exist && !--evdev->open)
		input_close_device(&evdev->handle);

	mutex_unlock(&evdev->mutex);
}

/*
 * Wake up users waiting for IO so they can disconnect from
 * dead device.
 */
static void evdev_hangup(struct evdev *evdev)
{
	struct evdev_client *client;

	spin_lock(&evdev->client_lock);
	list_for_each_entry(client, &evdev->client_list, node)
		kill_fasync(&client->fasync, SIGIO, POLL_HUP);
	spin_unlock(&evdev->client_lock);

	wake_up_interruptible(&evdev->wait);
}

364
static int evdev_release(struct inode *inode, struct file *file)
L
Linus Torvalds 已提交
365
{
366 367
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
L
Linus Torvalds 已提交
368

369
	mutex_lock(&evdev->mutex);
370
	evdev_ungrab(evdev, client);
371
	mutex_unlock(&evdev->mutex);
L
Linus Torvalds 已提交
372

373
	evdev_detach_client(evdev, client);
374 375 376 377 378

	if (is_vmalloc_addr(client))
		vfree(client);
	else
		kfree(client);
L
Linus Torvalds 已提交
379

380
	evdev_close_device(evdev);
L
Linus Torvalds 已提交
381 382 383 384

	return 0;
}

385 386
static unsigned int evdev_compute_buffer_size(struct input_dev *dev)
{
387 388 389 390 391
	unsigned int n_events =
		max(dev->hint_events_per_packet * EVDEV_BUF_PACKETS,
		    EVDEV_MIN_BUFFER_SIZE);

	return roundup_pow_of_two(n_events);
392 393
}

394
static int evdev_open(struct inode *inode, struct file *file)
L
Linus Torvalds 已提交
395
{
396 397
	struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev);
	unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev);
398 399
	unsigned int size = sizeof(struct evdev_client) +
					bufsize * sizeof(struct input_event);
400
	struct evdev_client *client;
401
	int error;
L
Linus Torvalds 已提交
402

403 404 405
	client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
	if (!client)
		client = vzalloc(size);
406 407
	if (!client)
		return -ENOMEM;
L
Linus Torvalds 已提交
408

409
	client->bufsize = bufsize;
410
	spin_lock_init(&client->buffer_lock);
411
	client->evdev = evdev;
412
	evdev_attach_client(evdev, client);
L
Linus Torvalds 已提交
413

414 415 416
	error = evdev_open_device(evdev);
	if (error)
		goto err_free_client;
L
Linus Torvalds 已提交
417

418
	file->private_data = client;
419 420
	nonseekable_open(inode, file);

L
Linus Torvalds 已提交
421
	return 0;
422 423

 err_free_client:
424
	evdev_detach_client(evdev, client);
425 426
	kfree(client);
	return error;
L
Linus Torvalds 已提交
427 428
}

429 430
static ssize_t evdev_write(struct file *file, const char __user *buffer,
			   size_t count, loff_t *ppos)
431
{
432 433
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
434
	struct input_event event;
435
	int retval = 0;
436

437
	if (count != 0 && count < input_event_size())
438 439
		return -EINVAL;

440 441 442 443
	retval = mutex_lock_interruptible(&evdev->mutex);
	if (retval)
		return retval;

444
	if (!evdev->exist || client->revoked) {
445 446 447
		retval = -ENODEV;
		goto out;
	}
448

449 450
	while (retval + input_event_size() <= count) {

451
		if (input_event_from_user(buffer + retval, &event)) {
452 453 454
			retval = -EFAULT;
			goto out;
		}
455
		retval += input_event_size();
456 457 458

		input_inject_event(&evdev->handle,
				   event.type, event.code, event.value);
459
	}
460

461 462
 out:
	mutex_unlock(&evdev->mutex);
463 464 465
	return retval;
}

466 467 468 469 470 471 472
static int evdev_fetch_next_event(struct evdev_client *client,
				  struct input_event *event)
{
	int have_event;

	spin_lock_irq(&client->buffer_lock);

473
	have_event = client->packet_head != client->tail;
474 475
	if (have_event) {
		*event = client->buffer[client->tail++];
476
		client->tail &= client->bufsize - 1;
477 478 479 480 481 482 483 484 485
	}

	spin_unlock_irq(&client->buffer_lock);

	return have_event;
}

static ssize_t evdev_read(struct file *file, char __user *buffer,
			  size_t count, loff_t *ppos)
L
Linus Torvalds 已提交
486
{
487 488
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
489
	struct input_event event;
490 491
	size_t read = 0;
	int error;
L
Linus Torvalds 已提交
492

493
	if (count != 0 && count < input_event_size())
L
Linus Torvalds 已提交
494 495
		return -EINVAL;

496
	for (;;) {
497
		if (!evdev->exist || client->revoked)
498
			return -ENODEV;
L
Linus Torvalds 已提交
499

500 501 502 503 504 505 506 507 508 509
		if (client->packet_head == client->tail &&
		    (file->f_flags & O_NONBLOCK))
			return -EAGAIN;

		/*
		 * count == 0 is special - no IO is done but we check
		 * for error conditions (see above).
		 */
		if (count == 0)
			break;
L
Linus Torvalds 已提交
510

511 512
		while (read + input_event_size() <= count &&
		       evdev_fetch_next_event(client, &event)) {
513

514 515
			if (input_event_to_user(buffer + read, &event))
				return -EFAULT;
516

517 518
			read += input_event_size();
		}
L
Linus Torvalds 已提交
519

520 521
		if (read)
			break;
522

523 524 525
		if (!(file->f_flags & O_NONBLOCK)) {
			error = wait_event_interruptible(evdev->wait,
					client->packet_head != client->tail ||
526
					!evdev->exist || client->revoked);
527 528 529 530 531 532
			if (error)
				return error;
		}
	}

	return read;
L
Linus Torvalds 已提交
533 534 535 536 537
}

/* No kernel lock - fine */
static unsigned int evdev_poll(struct file *file, poll_table *wait)
{
538 539
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
540
	unsigned int mask;
541

542
	poll_wait(file, &evdev->wait, wait);
543

544 545 546 547 548
	if (evdev->exist && !client->revoked)
		mask = POLLOUT | POLLWRNORM;
	else
		mask = POLLHUP | POLLERR;

549
	if (client->packet_head != client->tail)
550 551 552
		mask |= POLLIN | POLLRDNORM;

	return mask;
L
Linus Torvalds 已提交
553 554
}

555 556 557
#ifdef CONFIG_COMPAT

#define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8)
558
#define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1)
559 560 561 562 563 564 565 566

#ifdef __BIG_ENDIAN
static int bits_to_user(unsigned long *bits, unsigned int maxbit,
			unsigned int maxlen, void __user *p, int compat)
{
	int len, i;

	if (compat) {
567
		len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t);
568
		if (len > maxlen)
569 570 571 572 573 574 575 576 577
			len = maxlen;

		for (i = 0; i < len / sizeof(compat_long_t); i++)
			if (copy_to_user((compat_long_t __user *) p + i,
					 (compat_long_t *) bits +
						i + 1 - ((i % 2) << 1),
					 sizeof(compat_long_t)))
				return -EFAULT;
	} else {
578
		len = BITS_TO_LONGS(maxbit) * sizeof(long);
579 580 581 582 583 584 585 586 587 588 589 590 591 592
		if (len > maxlen)
			len = maxlen;

		if (copy_to_user(p, bits, len))
			return -EFAULT;
	}

	return len;
}
#else
static int bits_to_user(unsigned long *bits, unsigned int maxbit,
			unsigned int maxlen, void __user *p, int compat)
{
	int len = compat ?
593 594
			BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) :
			BITS_TO_LONGS(maxbit) * sizeof(long);
595 596 597 598 599 600 601 602 603 604 605 606 607

	if (len > maxlen)
		len = maxlen;

	return copy_to_user(p, bits, len) ? -EFAULT : len;
}
#endif /* __BIG_ENDIAN */

#else

static int bits_to_user(unsigned long *bits, unsigned int maxbit,
			unsigned int maxlen, void __user *p, int compat)
{
608
	int len = BITS_TO_LONGS(maxbit) * sizeof(long);
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631

	if (len > maxlen)
		len = maxlen;

	return copy_to_user(p, bits, len) ? -EFAULT : len;
}

#endif /* CONFIG_COMPAT */

static int str_to_user(const char *str, unsigned int maxlen, void __user *p)
{
	int len;

	if (!str)
		return -ENOENT;

	len = strlen(str) + 1;
	if (len > maxlen)
		len = maxlen;

	return copy_to_user(p, str, len) ? -EFAULT : len;
}

632
#define OLD_KEY_MAX	0x1ff
633 634 635
static int handle_eviocgbit(struct input_dev *dev,
			    unsigned int type, unsigned int size,
			    void __user *p, int compat_mode)
636
{
637
	static unsigned long keymax_warn_time;
638 639 640
	unsigned long *bits;
	int len;

641
	switch (type) {
642 643 644 645 646 647 648 649 650 651 652 653

	case      0: bits = dev->evbit;  len = EV_MAX;  break;
	case EV_KEY: bits = dev->keybit; len = KEY_MAX; break;
	case EV_REL: bits = dev->relbit; len = REL_MAX; break;
	case EV_ABS: bits = dev->absbit; len = ABS_MAX; break;
	case EV_MSC: bits = dev->mscbit; len = MSC_MAX; break;
	case EV_LED: bits = dev->ledbit; len = LED_MAX; break;
	case EV_SND: bits = dev->sndbit; len = SND_MAX; break;
	case EV_FF:  bits = dev->ffbit;  len = FF_MAX;  break;
	case EV_SW:  bits = dev->swbit;  len = SW_MAX;  break;
	default: return -EINVAL;
	}
654 655 656 657 658 659

	/*
	 * Work around bugs in userspace programs that like to do
	 * EVIOCGBIT(EV_KEY, KEY_MAX) and not realize that 'len'
	 * should be in bytes, not in bits.
	 */
660
	if (type == EV_KEY && size == OLD_KEY_MAX) {
661 662
		len = OLD_KEY_MAX;
		if (printk_timed_ratelimit(&keymax_warn_time, 10 * 1000))
J
Joe Perches 已提交
663 664 665 666 667
			pr_warning("(EVIOCGBIT): Suspicious buffer size %u, "
				   "limiting output to %zu bytes. See "
				   "http://userweb.kernel.org/~dtor/eviocgbit-bug.html\n",
				   OLD_KEY_MAX,
				   BITS_TO_LONGS(OLD_KEY_MAX) * sizeof(long));
668 669
	}

670
	return bits_to_user(bits, len, size, p, compat_mode);
671
}
672
#undef OLD_KEY_MAX
673

674
static int evdev_handle_get_keycode(struct input_dev *dev, void __user *p)
675
{
676 677 678 679 680
	struct input_keymap_entry ke = {
		.len	= sizeof(unsigned int),
		.flags	= 0,
	};
	int __user *ip = (int __user *)p;
681 682
	int error;

683 684 685
	/* legacy case */
	if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
		return -EFAULT;
686

687 688 689
	error = input_get_keycode(dev, &ke);
	if (error)
		return error;
690

691 692
	if (put_user(ke.keycode, ip + 1))
		return -EFAULT;
693

694 695
	return 0;
}
696

697 698 699 700
static int evdev_handle_get_keycode_v2(struct input_dev *dev, void __user *p)
{
	struct input_keymap_entry ke;
	int error;
701

702 703
	if (copy_from_user(&ke, p, sizeof(ke)))
		return -EFAULT;
704

705 706 707
	error = input_get_keycode(dev, &ke);
	if (error)
		return error;
708

709 710
	if (copy_to_user(p, &ke, sizeof(ke)))
		return -EFAULT;
711 712 713 714

	return 0;
}

715
static int evdev_handle_set_keycode(struct input_dev *dev, void __user *p)
716
{
717 718 719 720 721
	struct input_keymap_entry ke = {
		.len	= sizeof(unsigned int),
		.flags	= 0,
	};
	int __user *ip = (int __user *)p;
722

723 724
	if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
		return -EFAULT;
725

726 727
	if (get_user(ke.keycode, ip + 1))
		return -EFAULT;
728

729 730
	return input_set_keycode(dev, &ke);
}
731

732 733 734
static int evdev_handle_set_keycode_v2(struct input_dev *dev, void __user *p)
{
	struct input_keymap_entry ke;
735

736 737
	if (copy_from_user(&ke, p, sizeof(ke)))
		return -EFAULT;
738

739 740
	if (ke.len > sizeof(ke.scancode))
		return -EINVAL;
741 742 743 744

	return input_set_keycode(dev, &ke);
}

745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789
/*
 * If we transfer state to the user, we should flush all pending events
 * of the same type from the client's queue. Otherwise, they might end up
 * with duplicate events, which can screw up client's state tracking.
 * If bits_to_user fails after flushing the queue, we queue a SYN_DROPPED
 * event so user-space will notice missing events.
 *
 * LOCKING:
 * We need to take event_lock before buffer_lock to avoid dead-locks. But we
 * need the even_lock only to guarantee consistent state. We can safely release
 * it while flushing the queue. This allows input-core to handle filters while
 * we flush the queue.
 */
static int evdev_handle_get_val(struct evdev_client *client,
				struct input_dev *dev, unsigned int type,
				unsigned long *bits, unsigned int max,
				unsigned int size, void __user *p, int compat)
{
	int ret;
	unsigned long *mem;

	mem = kmalloc(sizeof(unsigned long) * max, GFP_KERNEL);
	if (!mem)
		return -ENOMEM;

	spin_lock_irq(&dev->event_lock);
	spin_lock(&client->buffer_lock);

	memcpy(mem, bits, sizeof(unsigned long) * max);

	spin_unlock(&dev->event_lock);

	__evdev_flush_queue(client, type);

	spin_unlock_irq(&client->buffer_lock);

	ret = bits_to_user(mem, max, size, p, compat);
	if (ret < 0)
		evdev_queue_syn_dropped(client);

	kfree(mem);

	return ret;
}

790 791 792 793
static int evdev_handle_mt_request(struct input_dev *dev,
				   unsigned int size,
				   int __user *ip)
{
H
Henrik Rydberg 已提交
794
	const struct input_mt *mt = dev->mt;
795 796 797 798 799 800
	unsigned int code;
	int max_slots;
	int i;

	if (get_user(code, &ip[0]))
		return -EFAULT;
H
Henrik Rydberg 已提交
801
	if (!mt || !input_is_mt_value(code))
802 803 804
		return -EINVAL;

	max_slots = (size - sizeof(__u32)) / sizeof(__s32);
H
Henrik Rydberg 已提交
805 806 807
	for (i = 0; i < mt->num_slots && i < max_slots; i++) {
		int value = input_mt_get_value(&mt->slots[i], code);
		if (put_user(value, &ip[1 + i]))
808
			return -EFAULT;
H
Henrik Rydberg 已提交
809
	}
810 811 812 813

	return 0;
}

814 815 816 817 818 819 820 821 822 823 824
static int evdev_revoke(struct evdev *evdev, struct evdev_client *client,
			struct file *file)
{
	client->revoked = true;
	evdev_ungrab(evdev, client);
	input_flush_device(&evdev->handle, file);
	wake_up_interruptible(&evdev->wait);

	return 0;
}

825 826
static long evdev_do_ioctl(struct file *file, unsigned int cmd,
			   void __user *p, int compat_mode)
L
Linus Torvalds 已提交
827
{
828 829
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
L
Linus Torvalds 已提交
830 831
	struct input_dev *dev = evdev->handle.dev;
	struct input_absinfo abs;
832
	struct ff_effect effect;
833
	int __user *ip = (int __user *)p;
834
	unsigned int i, t, u, v;
835
	unsigned int size;
836
	int error;
L
Linus Torvalds 已提交
837

838
	/* First we check for fixed-length commands */
L
Linus Torvalds 已提交
839 840
	switch (cmd) {

841 842
	case EVIOCGVERSION:
		return put_user(EV_VERSION, ip);
L
Linus Torvalds 已提交
843

844 845 846 847
	case EVIOCGID:
		if (copy_to_user(p, &dev->id, sizeof(struct input_id)))
			return -EFAULT;
		return 0;
848

849 850 851 852 853 854 855 856
	case EVIOCGREP:
		if (!test_bit(EV_REP, dev->evbit))
			return -ENOSYS;
		if (put_user(dev->rep[REP_DELAY], ip))
			return -EFAULT;
		if (put_user(dev->rep[REP_PERIOD], ip + 1))
			return -EFAULT;
		return 0;
857

858 859 860 861 862 863 864
	case EVIOCSREP:
		if (!test_bit(EV_REP, dev->evbit))
			return -ENOSYS;
		if (get_user(u, ip))
			return -EFAULT;
		if (get_user(v, ip + 1))
			return -EFAULT;
865

866 867
		input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
		input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
868

869
		return 0;
L
Linus Torvalds 已提交
870

871 872
	case EVIOCRMFF:
		return input_ff_erase(dev, (int)(unsigned long) p, file);
L
Linus Torvalds 已提交
873

874 875 876 877 878 879 880 881 882 883 884 885
	case EVIOCGEFFECTS:
		i = test_bit(EV_FF, dev->evbit) ?
				dev->ff->max_effects : 0;
		if (put_user(i, ip))
			return -EFAULT;
		return 0;

	case EVIOCGRAB:
		if (p)
			return evdev_grab(evdev, client);
		else
			return evdev_ungrab(evdev, client);
886

887 888 889 890 891 892
	case EVIOCREVOKE:
		if (p)
			return -EINVAL;
		else
			return evdev_revoke(evdev, client, file);

893 894 895 896 897 898 899 900
	case EVIOCSCLOCKID:
		if (copy_from_user(&i, p, sizeof(unsigned int)))
			return -EFAULT;
		if (i != CLOCK_MONOTONIC && i != CLOCK_REALTIME)
			return -EINVAL;
		client->clkid = i;
		return 0;

901 902 903 904 905 906 907 908 909 910 911
	case EVIOCGKEYCODE:
		return evdev_handle_get_keycode(dev, p);

	case EVIOCSKEYCODE:
		return evdev_handle_set_keycode(dev, p);

	case EVIOCGKEYCODE_V2:
		return evdev_handle_get_keycode_v2(dev, p);

	case EVIOCSKEYCODE_V2:
		return evdev_handle_set_keycode_v2(dev, p);
912
	}
L
Linus Torvalds 已提交
913

914
	size = _IOC_SIZE(cmd);
L
Linus Torvalds 已提交
915

916 917 918
	/* Now check variable-length commands */
#define EVIOC_MASK_SIZE(nr)	((nr) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
	switch (EVIOC_MASK_SIZE(cmd)) {
919

920 921 922 923
	case EVIOCGPROP(0):
		return bits_to_user(dev->propbit, INPUT_PROP_MAX,
				    size, p, compat_mode);

924 925 926
	case EVIOCGMTSLOTS(0):
		return evdev_handle_mt_request(dev, size, ip);

927
	case EVIOCGKEY(0):
928 929
		return evdev_handle_get_val(client, dev, EV_KEY, dev->key,
					    KEY_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
930

931
	case EVIOCGLED(0):
932 933
		return evdev_handle_get_val(client, dev, EV_LED, dev->led,
					    LED_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
934

935
	case EVIOCGSND(0):
936 937
		return evdev_handle_get_val(client, dev, EV_SND, dev->snd,
					    SND_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
938

939
	case EVIOCGSW(0):
940 941
		return evdev_handle_get_val(client, dev, EV_SW, dev->sw,
					    SW_MAX, size, p, compat_mode);
942

943 944
	case EVIOCGNAME(0):
		return str_to_user(dev->name, size, p);
L
Linus Torvalds 已提交
945

946 947
	case EVIOCGPHYS(0):
		return str_to_user(dev->phys, size, p);
L
Linus Torvalds 已提交
948

949 950
	case EVIOCGUNIQ(0):
		return str_to_user(dev->uniq, size, p);
L
Linus Torvalds 已提交
951

952 953 954
	case EVIOC_MASK_SIZE(EVIOCSFF):
		if (input_ff_effect_from_user(p, size, &effect))
			return -EFAULT;
L
Linus Torvalds 已提交
955

956
		error = input_ff_upload(dev, &effect, file);
957 958
		if (error)
			return error;
L
Linus Torvalds 已提交
959

960 961
		if (put_user(effect.id, &(((struct ff_effect __user *)p)->id)))
			return -EFAULT;
962

963
		return 0;
964
	}
L
Linus Torvalds 已提交
965

966 967 968
	/* Multi-number variable-length handlers */
	if (_IOC_TYPE(cmd) != 'E')
		return -EINVAL;
L
Linus Torvalds 已提交
969

970
	if (_IOC_DIR(cmd) == _IOC_READ) {
971

972 973 974 975
		if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0, 0)))
			return handle_eviocgbit(dev,
						_IOC_NR(cmd) & EV_MAX, size,
						p, compat_mode);
L
Linus Torvalds 已提交
976

977
		if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
978

979 980 981
			if (!dev->absinfo)
				return -EINVAL;

982 983
			t = _IOC_NR(cmd) & ABS_MAX;
			abs = dev->absinfo[t];
984

985 986 987
			if (copy_to_user(p, &abs, min_t(size_t,
					size, sizeof(struct input_absinfo))))
				return -EFAULT;
988

989 990 991
			return 0;
		}
	}
992

993
	if (_IOC_DIR(cmd) == _IOC_WRITE) {
994

995
		if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
L
Linus Torvalds 已提交
996

997 998 999
			if (!dev->absinfo)
				return -EINVAL;

1000
			t = _IOC_NR(cmd) & ABS_MAX;
1001

1002 1003 1004
			if (copy_from_user(&abs, p, min_t(size_t,
					size, sizeof(struct input_absinfo))))
				return -EFAULT;
L
Linus Torvalds 已提交
1005

1006 1007
			if (size < sizeof(struct input_absinfo))
				abs.resolution = 0;
1008

1009 1010 1011
			/* We can't change number of reserved MT slots */
			if (t == ABS_MT_SLOT)
				return -EINVAL;
H
Henrik Rydberg 已提交
1012

1013 1014 1015 1016 1017 1018 1019 1020
			/*
			 * Take event lock to ensure that we are not
			 * changing device parameters in the middle
			 * of event.
			 */
			spin_lock_irq(&dev->event_lock);
			dev->absinfo[t] = abs;
			spin_unlock_irq(&dev->event_lock);
1021

1022
			return 0;
1023
		}
L
Linus Torvalds 已提交
1024
	}
1025

L
Linus Torvalds 已提交
1026 1027 1028
	return -EINVAL;
}

1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039
static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
				void __user *p, int compat_mode)
{
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
	int retval;

	retval = mutex_lock_interruptible(&evdev->mutex);
	if (retval)
		return retval;

1040
	if (!evdev->exist || client->revoked) {
1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051
		retval = -ENODEV;
		goto out;
	}

	retval = evdev_do_ioctl(file, cmd, p, compat_mode);

 out:
	mutex_unlock(&evdev->mutex);
	return retval;
}

1052 1053 1054 1055
static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	return evdev_ioctl_handler(file, cmd, (void __user *)arg, 0);
}
1056

1057
#ifdef CONFIG_COMPAT
1058 1059
static long evdev_ioctl_compat(struct file *file,
				unsigned int cmd, unsigned long arg)
1060
{
1061
	return evdev_ioctl_handler(file, cmd, compat_ptr(arg), 1);
L
Linus Torvalds 已提交
1062
}
1063
#endif
L
Linus Torvalds 已提交
1064

D
Dmitry Torokhov 已提交
1065
static const struct file_operations evdev_fops = {
1066 1067 1068 1069 1070 1071 1072
	.owner		= THIS_MODULE,
	.read		= evdev_read,
	.write		= evdev_write,
	.poll		= evdev_poll,
	.open		= evdev_open,
	.release	= evdev_release,
	.unlocked_ioctl	= evdev_ioctl,
1073
#ifdef CONFIG_COMPAT
1074
	.compat_ioctl	= evdev_ioctl_compat,
1075
#endif
1076
	.fasync		= evdev_fasync,
1077 1078
	.flush		= evdev_flush,
	.llseek		= no_llseek,
L
Linus Torvalds 已提交
1079 1080
};

1081 1082 1083 1084 1085 1086 1087 1088
/*
 * Mark device non-existent. This disables writes, ioctls and
 * prevents new users from opening the device. Already posted
 * blocking reads will stay, however new ones will fail.
 */
static void evdev_mark_dead(struct evdev *evdev)
{
	mutex_lock(&evdev->mutex);
1089
	evdev->exist = false;
1090 1091 1092 1093 1094 1095 1096 1097 1098
	mutex_unlock(&evdev->mutex);
}

static void evdev_cleanup(struct evdev *evdev)
{
	struct input_handle *handle = &evdev->handle;

	evdev_mark_dead(evdev);
	evdev_hangup(evdev);
1099 1100

	cdev_del(&evdev->cdev);
1101 1102 1103 1104 1105 1106 1107 1108 1109 1110

	/* evdev is marked dead so no one else accesses evdev->open */
	if (evdev->open) {
		input_flush_device(handle, NULL);
		input_close_device(handle);
	}
}

/*
 * Create new evdev device. Note that input core serializes calls
1111
 * to connect and disconnect.
1112
 */
1113 1114
static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
			 const struct input_device_id *id)
L
Linus Torvalds 已提交
1115 1116 1117
{
	struct evdev *evdev;
	int minor;
1118
	int dev_no;
1119
	int error;
L
Linus Torvalds 已提交
1120

1121 1122 1123 1124 1125
	minor = input_get_new_minor(EVDEV_MINOR_BASE, EVDEV_MINORS, true);
	if (minor < 0) {
		error = minor;
		pr_err("failed to reserve new minor: %d\n", error);
		return error;
L
Linus Torvalds 已提交
1126 1127
	}

1128
	evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
1129 1130 1131 1132
	if (!evdev) {
		error = -ENOMEM;
		goto err_free_minor;
	}
L
Linus Torvalds 已提交
1133

1134
	INIT_LIST_HEAD(&evdev->client_list);
1135 1136
	spin_lock_init(&evdev->client_lock);
	mutex_init(&evdev->mutex);
L
Linus Torvalds 已提交
1137
	init_waitqueue_head(&evdev->wait);
1138
	evdev->exist = true;
1139 1140 1141 1142 1143 1144

	dev_no = minor;
	/* Normalize device number if it falls into legacy range */
	if (dev_no < EVDEV_MINOR_BASE + EVDEV_MINORS)
		dev_no -= EVDEV_MINOR_BASE;
	dev_set_name(&evdev->dev, "event%d", dev_no);
1145

1146
	evdev->handle.dev = input_get_device(dev);
1147
	evdev->handle.name = dev_name(&evdev->dev);
L
Linus Torvalds 已提交
1148 1149 1150
	evdev->handle.handler = handler;
	evdev->handle.private = evdev;

1151
	evdev->dev.devt = MKDEV(INPUT_MAJOR, minor);
1152 1153 1154 1155
	evdev->dev.class = &input_class;
	evdev->dev.parent = &dev->dev;
	evdev->dev.release = evdev_free;
	device_initialize(&evdev->dev);
1156

1157
	error = input_register_handle(&evdev->handle);
1158
	if (error)
1159
		goto err_free_evdev;
1160

1161
	cdev_init(&evdev->cdev, &evdev_fops);
1162
	evdev->cdev.kobj.parent = &evdev->dev.kobj;
1163
	error = cdev_add(&evdev->cdev, evdev->dev.devt, 1);
1164 1165 1166 1167
	if (error)
		goto err_unregister_handle;

	error = device_add(&evdev->dev);
1168
	if (error)
1169
		goto err_cleanup_evdev;
L
Linus Torvalds 已提交
1170

1171
	return 0;
L
Linus Torvalds 已提交
1172

1173 1174 1175 1176
 err_cleanup_evdev:
	evdev_cleanup(evdev);
 err_unregister_handle:
	input_unregister_handle(&evdev->handle);
1177
 err_free_evdev:
1178
	put_device(&evdev->dev);
1179 1180
 err_free_minor:
	input_free_minor(minor);
1181
	return error;
L
Linus Torvalds 已提交
1182 1183 1184 1185 1186 1187
}

static void evdev_disconnect(struct input_handle *handle)
{
	struct evdev *evdev = handle->private;

1188
	device_del(&evdev->dev);
1189
	evdev_cleanup(evdev);
1190
	input_free_minor(MINOR(evdev->dev.devt));
1191
	input_unregister_handle(handle);
1192
	put_device(&evdev->dev);
L
Linus Torvalds 已提交
1193 1194
}

D
Dmitry Torokhov 已提交
1195
static const struct input_device_id evdev_ids[] = {
L
Linus Torvalds 已提交
1196 1197 1198 1199 1200 1201 1202
	{ .driver_info = 1 },	/* Matches all devices */
	{ },			/* Terminating zero entry */
};

MODULE_DEVICE_TABLE(input, evdev_ids);

static struct input_handler evdev_handler = {
1203
	.event		= evdev_event,
1204
	.events		= evdev_events,
1205 1206
	.connect	= evdev_connect,
	.disconnect	= evdev_disconnect,
1207
	.legacy_minors	= true,
1208 1209 1210
	.minor		= EVDEV_MINOR_BASE,
	.name		= "evdev",
	.id_table	= evdev_ids,
L
Linus Torvalds 已提交
1211 1212 1213 1214
};

static int __init evdev_init(void)
{
1215
	return input_register_handler(&evdev_handler);
L
Linus Torvalds 已提交
1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228
}

static void __exit evdev_exit(void)
{
	input_unregister_handler(&evdev_handler);
}

module_init(evdev_init);
module_exit(evdev_exit);

MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
MODULE_DESCRIPTION("Input driver event char devices");
MODULE_LICENSE("GPL");