evdev.c 24.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 21 22
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
23
#include <linux/input/mt.h>
L
Linus Torvalds 已提交
24 25
#include <linux/major.h>
#include <linux/device.h>
26
#include <linux/cdev.h>
27
#include "input-compat.h"
L
Linus Torvalds 已提交
28 29 30 31 32

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

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

55 56
static void __pass_event(struct evdev_client *client,
			 const struct input_event *event)
57
{
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
	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;

73 74
		client->packet_head = client->tail;
	}
75

76 77
	if (event->type == EV_SYN && event->code == SYN_REPORT) {
		client->packet_head = client->head;
78
		kill_fasync(&client->fasync, SIGIO, POLL_IN);
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
}

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;

	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;
	}
105 106

	spin_unlock(&client->buffer_lock);
107 108 109

	if (wakeup)
		wake_up_interruptible(&evdev->wait);
110 111 112
}

/*
113
 * Pass incoming events to all connected clients.
114
 */
115 116
static void evdev_events(struct input_handle *handle,
			 const struct input_value *vals, unsigned int count)
L
Linus Torvalds 已提交
117 118
{
	struct evdev *evdev = handle->private;
119
	struct evdev_client *client;
120 121 122 123
	ktime_t time_mono, time_real;

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

D
Dmitry Torokhov 已提交
125 126
	rcu_read_lock();

127
	client = rcu_dereference(evdev->grab);
128

129
	if (client)
130
		evdev_pass_values(client, vals, count, time_mono, time_real);
131 132
	else
		list_for_each_entry_rcu(client, &evdev->client_list, node)
133 134
			evdev_pass_values(client, vals, count,
					  time_mono, time_real);
L
Linus Torvalds 已提交
135

D
Dmitry Torokhov 已提交
136
	rcu_read_unlock();
137
}
D
Dmitry Torokhov 已提交
138

139 140 141 142 143 144 145 146 147
/*
 * 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 已提交
148 149 150 151
}

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

154
	return fasync_helper(fd, file, on, &client->fasync);
L
Linus Torvalds 已提交
155 156
}

157
static int evdev_flush(struct file *file, fl_owner_t id)
L
Linus Torvalds 已提交
158
{
159 160
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
161 162 163 164 165
	int retval;

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

167
	if (!evdev->exist)
168 169 170
		retval = -ENODEV;
	else
		retval = input_flush_device(&evdev->handle, file);
171

172 173
	mutex_unlock(&evdev->mutex);
	return retval;
L
Linus Torvalds 已提交
174 175
}

176
static void evdev_free(struct device *dev)
L
Linus Torvalds 已提交
177
{
178 179
	struct evdev *evdev = container_of(dev, struct evdev, dev);

180
	input_put_device(evdev->handle.dev);
L
Linus Torvalds 已提交
181 182 183
	kfree(evdev);
}

184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
/*
 * 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)
{
206 207 208 209
	struct evdev_client *grab = rcu_dereference_protected(evdev->grab,
					lockdep_is_held(&evdev->mutex));

	if (grab != client)
210 211 212
		return  -EINVAL;

	rcu_assign_pointer(evdev->grab, NULL);
D
Dmitry Torokhov 已提交
213
	synchronize_rcu();
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
	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 已提交
233
	synchronize_rcu();
234 235 236 237 238 239 240 241 242 243 244 245
}

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;
246
	else if (!evdev->open++) {
247
		retval = input_open_device(&evdev->handle);
248 249 250
		if (retval)
			evdev->open--;
	}
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281

	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);
}

282
static int evdev_release(struct inode *inode, struct file *file)
L
Linus Torvalds 已提交
283
{
284 285
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
L
Linus Torvalds 已提交
286

287
	mutex_lock(&evdev->mutex);
288
	evdev_ungrab(evdev, client);
289
	mutex_unlock(&evdev->mutex);
L
Linus Torvalds 已提交
290

291
	evdev_detach_client(evdev, client);
292
	kfree(client);
L
Linus Torvalds 已提交
293

294
	evdev_close_device(evdev);
L
Linus Torvalds 已提交
295 296 297 298

	return 0;
}

299 300
static unsigned int evdev_compute_buffer_size(struct input_dev *dev)
{
301 302 303 304 305
	unsigned int n_events =
		max(dev->hint_events_per_packet * EVDEV_BUF_PACKETS,
		    EVDEV_MIN_BUFFER_SIZE);

	return roundup_pow_of_two(n_events);
306 307
}

308
static int evdev_open(struct inode *inode, struct file *file)
L
Linus Torvalds 已提交
309
{
310 311
	struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev);
	unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev);
312
	struct evdev_client *client;
313
	int error;
L
Linus Torvalds 已提交
314

315 316 317
	client = kzalloc(sizeof(struct evdev_client) +
				bufsize * sizeof(struct input_event),
			 GFP_KERNEL);
318 319
	if (!client)
		return -ENOMEM;
L
Linus Torvalds 已提交
320

321
	client->bufsize = bufsize;
322
	spin_lock_init(&client->buffer_lock);
323
	client->evdev = evdev;
324
	evdev_attach_client(evdev, client);
L
Linus Torvalds 已提交
325

326 327 328
	error = evdev_open_device(evdev);
	if (error)
		goto err_free_client;
L
Linus Torvalds 已提交
329

330
	file->private_data = client;
331 332
	nonseekable_open(inode, file);

L
Linus Torvalds 已提交
333
	return 0;
334 335

 err_free_client:
336
	evdev_detach_client(evdev, client);
337 338
	kfree(client);
	return error;
L
Linus Torvalds 已提交
339 340
}

341 342
static ssize_t evdev_write(struct file *file, const char __user *buffer,
			   size_t count, loff_t *ppos)
343
{
344 345
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
346
	struct input_event event;
347
	int retval = 0;
348

349
	if (count != 0 && count < input_event_size())
350 351
		return -EINVAL;

352 353 354 355 356 357 358 359
	retval = mutex_lock_interruptible(&evdev->mutex);
	if (retval)
		return retval;

	if (!evdev->exist) {
		retval = -ENODEV;
		goto out;
	}
360

361 362
	while (retval + input_event_size() <= count) {

363
		if (input_event_from_user(buffer + retval, &event)) {
364 365 366
			retval = -EFAULT;
			goto out;
		}
367
		retval += input_event_size();
368 369 370

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

373 374
 out:
	mutex_unlock(&evdev->mutex);
375 376 377
	return retval;
}

378 379 380 381 382 383 384
static int evdev_fetch_next_event(struct evdev_client *client,
				  struct input_event *event)
{
	int have_event;

	spin_lock_irq(&client->buffer_lock);

385
	have_event = client->packet_head != client->tail;
386 387
	if (have_event) {
		*event = client->buffer[client->tail++];
388
		client->tail &= client->bufsize - 1;
389 390 391 392 393 394 395 396 397
	}

	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 已提交
398
{
399 400
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
401
	struct input_event event;
402 403
	size_t read = 0;
	int error;
L
Linus Torvalds 已提交
404

405
	if (count != 0 && count < input_event_size())
L
Linus Torvalds 已提交
406 407
		return -EINVAL;

408 409 410
	for (;;) {
		if (!evdev->exist)
			return -ENODEV;
L
Linus Torvalds 已提交
411

412 413 414 415 416 417 418 419 420 421
		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 已提交
422

423 424
		while (read + input_event_size() <= count &&
		       evdev_fetch_next_event(client, &event)) {
425

426 427
			if (input_event_to_user(buffer + read, &event))
				return -EFAULT;
428

429 430
			read += input_event_size();
		}
L
Linus Torvalds 已提交
431

432 433
		if (read)
			break;
434

435 436 437 438 439 440 441 442 443 444
		if (!(file->f_flags & O_NONBLOCK)) {
			error = wait_event_interruptible(evdev->wait,
					client->packet_head != client->tail ||
					!evdev->exist);
			if (error)
				return error;
		}
	}

	return read;
L
Linus Torvalds 已提交
445 446 447 448 449
}

/* No kernel lock - fine */
static unsigned int evdev_poll(struct file *file, poll_table *wait)
{
450 451
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
452
	unsigned int mask;
453

454
	poll_wait(file, &evdev->wait, wait);
455 456

	mask = evdev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR;
457
	if (client->packet_head != client->tail)
458 459 460
		mask |= POLLIN | POLLRDNORM;

	return mask;
L
Linus Torvalds 已提交
461 462
}

463 464 465
#ifdef CONFIG_COMPAT

#define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8)
466
#define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1)
467 468 469 470 471 472 473 474

#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) {
475
		len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t);
476
		if (len > maxlen)
477 478 479 480 481 482 483 484 485
			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 {
486
		len = BITS_TO_LONGS(maxbit) * sizeof(long);
487 488 489 490 491 492 493 494 495 496 497 498 499 500
		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 ?
501 502
			BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) :
			BITS_TO_LONGS(maxbit) * sizeof(long);
503 504 505 506 507 508 509 510 511 512 513 514 515

	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)
{
516
	int len = BITS_TO_LONGS(maxbit) * sizeof(long);
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539

	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;
}

540
#define OLD_KEY_MAX	0x1ff
541 542 543
static int handle_eviocgbit(struct input_dev *dev,
			    unsigned int type, unsigned int size,
			    void __user *p, int compat_mode)
544
{
545
	static unsigned long keymax_warn_time;
546 547 548
	unsigned long *bits;
	int len;

549
	switch (type) {
550 551 552 553 554 555 556 557 558 559 560 561

	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;
	}
562 563 564 565 566 567

	/*
	 * 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.
	 */
568
	if (type == EV_KEY && size == OLD_KEY_MAX) {
569 570
		len = OLD_KEY_MAX;
		if (printk_timed_ratelimit(&keymax_warn_time, 10 * 1000))
J
Joe Perches 已提交
571 572 573 574 575
			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));
576 577
	}

578
	return bits_to_user(bits, len, size, p, compat_mode);
579
}
580
#undef OLD_KEY_MAX
581

582
static int evdev_handle_get_keycode(struct input_dev *dev, void __user *p)
583
{
584 585 586 587 588
	struct input_keymap_entry ke = {
		.len	= sizeof(unsigned int),
		.flags	= 0,
	};
	int __user *ip = (int __user *)p;
589 590
	int error;

591 592 593
	/* legacy case */
	if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
		return -EFAULT;
594

595 596 597
	error = input_get_keycode(dev, &ke);
	if (error)
		return error;
598

599 600
	if (put_user(ke.keycode, ip + 1))
		return -EFAULT;
601

602 603
	return 0;
}
604

605 606 607 608
static int evdev_handle_get_keycode_v2(struct input_dev *dev, void __user *p)
{
	struct input_keymap_entry ke;
	int error;
609

610 611
	if (copy_from_user(&ke, p, sizeof(ke)))
		return -EFAULT;
612

613 614 615
	error = input_get_keycode(dev, &ke);
	if (error)
		return error;
616

617 618
	if (copy_to_user(p, &ke, sizeof(ke)))
		return -EFAULT;
619 620 621 622

	return 0;
}

623
static int evdev_handle_set_keycode(struct input_dev *dev, void __user *p)
624
{
625 626 627 628 629
	struct input_keymap_entry ke = {
		.len	= sizeof(unsigned int),
		.flags	= 0,
	};
	int __user *ip = (int __user *)p;
630

631 632
	if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
		return -EFAULT;
633

634 635
	if (get_user(ke.keycode, ip + 1))
		return -EFAULT;
636

637 638
	return input_set_keycode(dev, &ke);
}
639

640 641 642
static int evdev_handle_set_keycode_v2(struct input_dev *dev, void __user *p)
{
	struct input_keymap_entry ke;
643

644 645
	if (copy_from_user(&ke, p, sizeof(ke)))
		return -EFAULT;
646

647 648
	if (ke.len > sizeof(ke.scancode))
		return -EINVAL;
649 650 651 652

	return input_set_keycode(dev, &ke);
}

653 654 655 656
static int evdev_handle_mt_request(struct input_dev *dev,
				   unsigned int size,
				   int __user *ip)
{
H
Henrik Rydberg 已提交
657
	const struct input_mt *mt = dev->mt;
658 659 660 661 662 663
	unsigned int code;
	int max_slots;
	int i;

	if (get_user(code, &ip[0]))
		return -EFAULT;
H
Henrik Rydberg 已提交
664
	if (!mt || !input_is_mt_value(code))
665 666 667
		return -EINVAL;

	max_slots = (size - sizeof(__u32)) / sizeof(__s32);
H
Henrik Rydberg 已提交
668 669 670
	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]))
671
			return -EFAULT;
H
Henrik Rydberg 已提交
672
	}
673 674 675 676

	return 0;
}

677 678
static long evdev_do_ioctl(struct file *file, unsigned int cmd,
			   void __user *p, int compat_mode)
L
Linus Torvalds 已提交
679
{
680 681
	struct evdev_client *client = file->private_data;
	struct evdev *evdev = client->evdev;
L
Linus Torvalds 已提交
682 683
	struct input_dev *dev = evdev->handle.dev;
	struct input_absinfo abs;
684
	struct ff_effect effect;
685
	int __user *ip = (int __user *)p;
686
	unsigned int i, t, u, v;
687
	unsigned int size;
688
	int error;
L
Linus Torvalds 已提交
689

690
	/* First we check for fixed-length commands */
L
Linus Torvalds 已提交
691 692
	switch (cmd) {

693 694
	case EVIOCGVERSION:
		return put_user(EV_VERSION, ip);
L
Linus Torvalds 已提交
695

696 697 698 699
	case EVIOCGID:
		if (copy_to_user(p, &dev->id, sizeof(struct input_id)))
			return -EFAULT;
		return 0;
700

701 702 703 704 705 706 707 708
	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;
709

710 711 712 713 714 715 716
	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;
717

718 719
		input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
		input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
720

721
		return 0;
L
Linus Torvalds 已提交
722

723 724
	case EVIOCRMFF:
		return input_ff_erase(dev, (int)(unsigned long) p, file);
L
Linus Torvalds 已提交
725

726 727 728 729 730 731 732 733 734 735 736 737
	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);
738

739 740 741 742 743 744 745 746
	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;

747 748 749 750 751 752 753 754 755 756 757
	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);
758
	}
L
Linus Torvalds 已提交
759

760
	size = _IOC_SIZE(cmd);
L
Linus Torvalds 已提交
761

762 763 764
	/* Now check variable-length commands */
#define EVIOC_MASK_SIZE(nr)	((nr) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
	switch (EVIOC_MASK_SIZE(cmd)) {
765

766 767 768 769
	case EVIOCGPROP(0):
		return bits_to_user(dev->propbit, INPUT_PROP_MAX,
				    size, p, compat_mode);

770 771 772
	case EVIOCGMTSLOTS(0):
		return evdev_handle_mt_request(dev, size, ip);

773 774
	case EVIOCGKEY(0):
		return bits_to_user(dev->key, KEY_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
775

776 777
	case EVIOCGLED(0):
		return bits_to_user(dev->led, LED_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
778

779 780
	case EVIOCGSND(0):
		return bits_to_user(dev->snd, SND_MAX, size, p, compat_mode);
L
Linus Torvalds 已提交
781

782 783
	case EVIOCGSW(0):
		return bits_to_user(dev->sw, SW_MAX, size, p, compat_mode);
784

785 786
	case EVIOCGNAME(0):
		return str_to_user(dev->name, size, p);
L
Linus Torvalds 已提交
787

788 789
	case EVIOCGPHYS(0):
		return str_to_user(dev->phys, size, p);
L
Linus Torvalds 已提交
790

791 792
	case EVIOCGUNIQ(0):
		return str_to_user(dev->uniq, size, p);
L
Linus Torvalds 已提交
793

794 795 796
	case EVIOC_MASK_SIZE(EVIOCSFF):
		if (input_ff_effect_from_user(p, size, &effect))
			return -EFAULT;
L
Linus Torvalds 已提交
797

798
		error = input_ff_upload(dev, &effect, file);
L
Linus Torvalds 已提交
799

800 801
		if (put_user(effect.id, &(((struct ff_effect __user *)p)->id)))
			return -EFAULT;
802

803 804
		return error;
	}
L
Linus Torvalds 已提交
805

806 807 808
	/* Multi-number variable-length handlers */
	if (_IOC_TYPE(cmd) != 'E')
		return -EINVAL;
L
Linus Torvalds 已提交
809

810
	if (_IOC_DIR(cmd) == _IOC_READ) {
811

812 813 814 815
		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 已提交
816

817
		if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
818

819 820 821
			if (!dev->absinfo)
				return -EINVAL;

822 823
			t = _IOC_NR(cmd) & ABS_MAX;
			abs = dev->absinfo[t];
824

825 826 827
			if (copy_to_user(p, &abs, min_t(size_t,
					size, sizeof(struct input_absinfo))))
				return -EFAULT;
828

829 830 831
			return 0;
		}
	}
832

833
	if (_IOC_DIR(cmd) == _IOC_WRITE) {
834

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

837 838 839
			if (!dev->absinfo)
				return -EINVAL;

840
			t = _IOC_NR(cmd) & ABS_MAX;
841

842 843 844
			if (copy_from_user(&abs, p, min_t(size_t,
					size, sizeof(struct input_absinfo))))
				return -EFAULT;
L
Linus Torvalds 已提交
845

846 847
			if (size < sizeof(struct input_absinfo))
				abs.resolution = 0;
848

849 850 851
			/* We can't change number of reserved MT slots */
			if (t == ABS_MT_SLOT)
				return -EINVAL;
H
Henrik Rydberg 已提交
852

853 854 855 856 857 858 859 860
			/*
			 * 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);
861

862
			return 0;
863
		}
L
Linus Torvalds 已提交
864
	}
865

L
Linus Torvalds 已提交
866 867 868
	return -EINVAL;
}

869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891
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;

	if (!evdev->exist) {
		retval = -ENODEV;
		goto out;
	}

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

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

892 893 894 895
static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	return evdev_ioctl_handler(file, cmd, (void __user *)arg, 0);
}
896

897
#ifdef CONFIG_COMPAT
898 899
static long evdev_ioctl_compat(struct file *file,
				unsigned int cmd, unsigned long arg)
900
{
901
	return evdev_ioctl_handler(file, cmd, compat_ptr(arg), 1);
L
Linus Torvalds 已提交
902
}
903
#endif
L
Linus Torvalds 已提交
904

D
Dmitry Torokhov 已提交
905
static const struct file_operations evdev_fops = {
906 907 908 909 910 911 912
	.owner		= THIS_MODULE,
	.read		= evdev_read,
	.write		= evdev_write,
	.poll		= evdev_poll,
	.open		= evdev_open,
	.release	= evdev_release,
	.unlocked_ioctl	= evdev_ioctl,
913
#ifdef CONFIG_COMPAT
914
	.compat_ioctl	= evdev_ioctl_compat,
915
#endif
916
	.fasync		= evdev_fasync,
917 918
	.flush		= evdev_flush,
	.llseek		= no_llseek,
L
Linus Torvalds 已提交
919 920
};

921 922 923 924 925 926 927 928
/*
 * 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);
929
	evdev->exist = false;
930 931 932 933 934 935 936 937 938
	mutex_unlock(&evdev->mutex);
}

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

	evdev_mark_dead(evdev);
	evdev_hangup(evdev);
939 940

	cdev_del(&evdev->cdev);
941 942 943 944 945 946 947 948 949 950

	/* 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
951
 * to connect and disconnect.
952
 */
953 954
static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
			 const struct input_device_id *id)
L
Linus Torvalds 已提交
955 956 957
{
	struct evdev *evdev;
	int minor;
958
	int dev_no;
959
	int error;
L
Linus Torvalds 已提交
960

961 962 963 964 965
	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 已提交
966 967
	}

968
	evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
969 970 971 972
	if (!evdev) {
		error = -ENOMEM;
		goto err_free_minor;
	}
L
Linus Torvalds 已提交
973

974
	INIT_LIST_HEAD(&evdev->client_list);
975 976
	spin_lock_init(&evdev->client_lock);
	mutex_init(&evdev->mutex);
L
Linus Torvalds 已提交
977
	init_waitqueue_head(&evdev->wait);
978
	evdev->exist = true;
979 980 981 982 983 984

	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);
985

986
	evdev->handle.dev = input_get_device(dev);
987
	evdev->handle.name = dev_name(&evdev->dev);
L
Linus Torvalds 已提交
988 989 990
	evdev->handle.handler = handler;
	evdev->handle.private = evdev;

991
	evdev->dev.devt = MKDEV(INPUT_MAJOR, minor);
992 993 994 995
	evdev->dev.class = &input_class;
	evdev->dev.parent = &dev->dev;
	evdev->dev.release = evdev_free;
	device_initialize(&evdev->dev);
996

997
	error = input_register_handle(&evdev->handle);
998
	if (error)
999
		goto err_free_evdev;
1000

1001
	cdev_init(&evdev->cdev, &evdev_fops);
1002
	evdev->cdev.kobj.parent = &evdev->dev.kobj;
1003
	error = cdev_add(&evdev->cdev, evdev->dev.devt, 1);
1004 1005 1006 1007
	if (error)
		goto err_unregister_handle;

	error = device_add(&evdev->dev);
1008
	if (error)
1009
		goto err_cleanup_evdev;
L
Linus Torvalds 已提交
1010

1011
	return 0;
L
Linus Torvalds 已提交
1012

1013 1014 1015 1016
 err_cleanup_evdev:
	evdev_cleanup(evdev);
 err_unregister_handle:
	input_unregister_handle(&evdev->handle);
1017
 err_free_evdev:
1018
	put_device(&evdev->dev);
1019 1020
 err_free_minor:
	input_free_minor(minor);
1021
	return error;
L
Linus Torvalds 已提交
1022 1023 1024 1025 1026 1027
}

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

1028
	device_del(&evdev->dev);
1029
	evdev_cleanup(evdev);
1030
	input_free_minor(MINOR(evdev->dev.devt));
1031
	input_unregister_handle(handle);
1032
	put_device(&evdev->dev);
L
Linus Torvalds 已提交
1033 1034
}

D
Dmitry Torokhov 已提交
1035
static const struct input_device_id evdev_ids[] = {
L
Linus Torvalds 已提交
1036 1037 1038 1039 1040 1041 1042
	{ .driver_info = 1 },	/* Matches all devices */
	{ },			/* Terminating zero entry */
};

MODULE_DEVICE_TABLE(input, evdev_ids);

static struct input_handler evdev_handler = {
1043
	.event		= evdev_event,
1044
	.events		= evdev_events,
1045 1046
	.connect	= evdev_connect,
	.disconnect	= evdev_disconnect,
1047
	.legacy_minors	= true,
1048 1049 1050
	.minor		= EVDEV_MINOR_BASE,
	.name		= "evdev",
	.id_table	= evdev_ids,
L
Linus Torvalds 已提交
1051 1052 1053 1054
};

static int __init evdev_init(void)
{
1055
	return input_register_handler(&evdev_handler);
L
Linus Torvalds 已提交
1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068
}

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");