1 /* 2 * Event char devices, giving access to raw input device events. 3 * 4 * Copyright (c) 1999-2002 Vojtech Pavlik 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 as published by 8 * the Free Software Foundation. 9 */ 10 11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 12 13 #define EVDEV_MINOR_BASE 64 14 #define EVDEV_MINORS 32 15 #define EVDEV_MIN_BUFFER_SIZE 64U 16 #define EVDEV_BUF_PACKETS 8 17 18 #include <linux/poll.h> 19 #include <linux/sched.h> 20 #include <linux/slab.h> 21 #include <linux/module.h> 22 #include <linux/init.h> 23 #include <linux/input/mt.h> 24 #include <linux/major.h> 25 #include <linux/device.h> 26 #include <linux/cdev.h> 27 #include "input-compat.h" 28 29 struct evdev { 30 int open; 31 struct input_handle handle; 32 wait_queue_head_t wait; 33 struct evdev_client __rcu *grab; 34 struct list_head client_list; 35 spinlock_t client_lock; /* protects client_list */ 36 struct mutex mutex; 37 struct device dev; 38 struct cdev cdev; 39 bool exist; 40 }; 41 42 struct evdev_client { 43 unsigned int head; 44 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 */ 47 struct fasync_struct *fasync; 48 struct evdev *evdev; 49 struct list_head node; 50 int clkid; 51 unsigned int bufsize; 52 struct input_event buffer[]; 53 }; 54 55 /* flush queued events of type @type, caller must hold client->buffer_lock */ 56 static void __evdev_flush_queue(struct evdev_client *client, unsigned int type) 57 { 58 unsigned int i, head, num; 59 unsigned int mask = client->bufsize - 1; 60 bool is_report; 61 struct input_event *ev; 62 63 BUG_ON(type == EV_SYN); 64 65 head = client->tail; 66 client->packet_head = client->tail; 67 68 /* init to 1 so a leading SYN_REPORT will not be dropped */ 69 num = 1; 70 71 for (i = client->tail; i != client->head; i = (i + 1) & mask) { 72 ev = &client->buffer[i]; 73 is_report = ev->type == EV_SYN && ev->code == SYN_REPORT; 74 75 if (ev->type == type) { 76 /* drop matched entry */ 77 continue; 78 } else if (is_report && !num) { 79 /* drop empty SYN_REPORT groups */ 80 continue; 81 } else if (head != i) { 82 /* move entry to fill the gap */ 83 client->buffer[head].time = ev->time; 84 client->buffer[head].type = ev->type; 85 client->buffer[head].code = ev->code; 86 client->buffer[head].value = ev->value; 87 } 88 89 num++; 90 head = (head + 1) & mask; 91 92 if (is_report) { 93 num = 0; 94 client->packet_head = head; 95 } 96 } 97 98 client->head = head; 99 } 100 101 /* queue SYN_DROPPED event */ 102 static void evdev_queue_syn_dropped(struct evdev_client *client) 103 { 104 unsigned long flags; 105 struct input_event ev; 106 ktime_t time; 107 108 time = ktime_get(); 109 if (client->clkid != CLOCK_MONOTONIC) 110 time = ktime_sub(time, ktime_get_monotonic_offset()); 111 112 ev.time = ktime_to_timeval(time); 113 ev.type = EV_SYN; 114 ev.code = SYN_DROPPED; 115 ev.value = 0; 116 117 spin_lock_irqsave(&client->buffer_lock, flags); 118 119 client->buffer[client->head++] = ev; 120 client->head &= client->bufsize - 1; 121 122 if (unlikely(client->head == client->tail)) { 123 /* drop queue but keep our SYN_DROPPED event */ 124 client->tail = (client->head - 1) & (client->bufsize - 1); 125 client->packet_head = client->tail; 126 } 127 128 spin_unlock_irqrestore(&client->buffer_lock, flags); 129 } 130 131 static void __pass_event(struct evdev_client *client, 132 const struct input_event *event) 133 { 134 client->buffer[client->head++] = *event; 135 client->head &= client->bufsize - 1; 136 137 if (unlikely(client->head == client->tail)) { 138 /* 139 * This effectively "drops" all unconsumed events, leaving 140 * EV_SYN/SYN_DROPPED plus the newest event in the queue. 141 */ 142 client->tail = (client->head - 2) & (client->bufsize - 1); 143 144 client->buffer[client->tail].time = event->time; 145 client->buffer[client->tail].type = EV_SYN; 146 client->buffer[client->tail].code = SYN_DROPPED; 147 client->buffer[client->tail].value = 0; 148 149 client->packet_head = client->tail; 150 } 151 152 if (event->type == EV_SYN && event->code == SYN_REPORT) { 153 client->packet_head = client->head; 154 kill_fasync(&client->fasync, SIGIO, POLL_IN); 155 } 156 } 157 158 static void evdev_pass_values(struct evdev_client *client, 159 const struct input_value *vals, unsigned int count, 160 ktime_t mono, ktime_t real) 161 { 162 struct evdev *evdev = client->evdev; 163 const struct input_value *v; 164 struct input_event event; 165 bool wakeup = false; 166 167 event.time = ktime_to_timeval(client->clkid == CLOCK_MONOTONIC ? 168 mono : real); 169 170 /* Interrupts are disabled, just acquire the lock. */ 171 spin_lock(&client->buffer_lock); 172 173 for (v = vals; v != vals + count; v++) { 174 event.type = v->type; 175 event.code = v->code; 176 event.value = v->value; 177 __pass_event(client, &event); 178 if (v->type == EV_SYN && v->code == SYN_REPORT) 179 wakeup = true; 180 } 181 182 spin_unlock(&client->buffer_lock); 183 184 if (wakeup) 185 wake_up_interruptible(&evdev->wait); 186 } 187 188 /* 189 * Pass incoming events to all connected clients. 190 */ 191 static void evdev_events(struct input_handle *handle, 192 const struct input_value *vals, unsigned int count) 193 { 194 struct evdev *evdev = handle->private; 195 struct evdev_client *client; 196 ktime_t time_mono, time_real; 197 198 time_mono = ktime_get(); 199 time_real = ktime_sub(time_mono, ktime_get_monotonic_offset()); 200 201 rcu_read_lock(); 202 203 client = rcu_dereference(evdev->grab); 204 205 if (client) 206 evdev_pass_values(client, vals, count, time_mono, time_real); 207 else 208 list_for_each_entry_rcu(client, &evdev->client_list, node) 209 evdev_pass_values(client, vals, count, 210 time_mono, time_real); 211 212 rcu_read_unlock(); 213 } 214 215 /* 216 * Pass incoming event to all connected clients. 217 */ 218 static void evdev_event(struct input_handle *handle, 219 unsigned int type, unsigned int code, int value) 220 { 221 struct input_value vals[] = { { type, code, value } }; 222 223 evdev_events(handle, vals, 1); 224 } 225 226 static int evdev_fasync(int fd, struct file *file, int on) 227 { 228 struct evdev_client *client = file->private_data; 229 230 return fasync_helper(fd, file, on, &client->fasync); 231 } 232 233 static int evdev_flush(struct file *file, fl_owner_t id) 234 { 235 struct evdev_client *client = file->private_data; 236 struct evdev *evdev = client->evdev; 237 int retval; 238 239 retval = mutex_lock_interruptible(&evdev->mutex); 240 if (retval) 241 return retval; 242 243 if (!evdev->exist) 244 retval = -ENODEV; 245 else 246 retval = input_flush_device(&evdev->handle, file); 247 248 mutex_unlock(&evdev->mutex); 249 return retval; 250 } 251 252 static void evdev_free(struct device *dev) 253 { 254 struct evdev *evdev = container_of(dev, struct evdev, dev); 255 256 input_put_device(evdev->handle.dev); 257 kfree(evdev); 258 } 259 260 /* 261 * Grabs an event device (along with underlying input device). 262 * This function is called with evdev->mutex taken. 263 */ 264 static int evdev_grab(struct evdev *evdev, struct evdev_client *client) 265 { 266 int error; 267 268 if (evdev->grab) 269 return -EBUSY; 270 271 error = input_grab_device(&evdev->handle); 272 if (error) 273 return error; 274 275 rcu_assign_pointer(evdev->grab, client); 276 277 return 0; 278 } 279 280 static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client) 281 { 282 struct evdev_client *grab = rcu_dereference_protected(evdev->grab, 283 lockdep_is_held(&evdev->mutex)); 284 285 if (grab != client) 286 return -EINVAL; 287 288 rcu_assign_pointer(evdev->grab, NULL); 289 synchronize_rcu(); 290 input_release_device(&evdev->handle); 291 292 return 0; 293 } 294 295 static void evdev_attach_client(struct evdev *evdev, 296 struct evdev_client *client) 297 { 298 spin_lock(&evdev->client_lock); 299 list_add_tail_rcu(&client->node, &evdev->client_list); 300 spin_unlock(&evdev->client_lock); 301 } 302 303 static void evdev_detach_client(struct evdev *evdev, 304 struct evdev_client *client) 305 { 306 spin_lock(&evdev->client_lock); 307 list_del_rcu(&client->node); 308 spin_unlock(&evdev->client_lock); 309 synchronize_rcu(); 310 } 311 312 static int evdev_open_device(struct evdev *evdev) 313 { 314 int retval; 315 316 retval = mutex_lock_interruptible(&evdev->mutex); 317 if (retval) 318 return retval; 319 320 if (!evdev->exist) 321 retval = -ENODEV; 322 else if (!evdev->open++) { 323 retval = input_open_device(&evdev->handle); 324 if (retval) 325 evdev->open--; 326 } 327 328 mutex_unlock(&evdev->mutex); 329 return retval; 330 } 331 332 static void evdev_close_device(struct evdev *evdev) 333 { 334 mutex_lock(&evdev->mutex); 335 336 if (evdev->exist && !--evdev->open) 337 input_close_device(&evdev->handle); 338 339 mutex_unlock(&evdev->mutex); 340 } 341 342 /* 343 * Wake up users waiting for IO so they can disconnect from 344 * dead device. 345 */ 346 static void evdev_hangup(struct evdev *evdev) 347 { 348 struct evdev_client *client; 349 350 spin_lock(&evdev->client_lock); 351 list_for_each_entry(client, &evdev->client_list, node) 352 kill_fasync(&client->fasync, SIGIO, POLL_HUP); 353 spin_unlock(&evdev->client_lock); 354 355 wake_up_interruptible(&evdev->wait); 356 } 357 358 static int evdev_release(struct inode *inode, struct file *file) 359 { 360 struct evdev_client *client = file->private_data; 361 struct evdev *evdev = client->evdev; 362 363 mutex_lock(&evdev->mutex); 364 evdev_ungrab(evdev, client); 365 mutex_unlock(&evdev->mutex); 366 367 evdev_detach_client(evdev, client); 368 kfree(client); 369 370 evdev_close_device(evdev); 371 372 return 0; 373 } 374 375 static unsigned int evdev_compute_buffer_size(struct input_dev *dev) 376 { 377 unsigned int n_events = 378 max(dev->hint_events_per_packet * EVDEV_BUF_PACKETS, 379 EVDEV_MIN_BUFFER_SIZE); 380 381 return roundup_pow_of_two(n_events); 382 } 383 384 static int evdev_open(struct inode *inode, struct file *file) 385 { 386 struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev); 387 unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev); 388 struct evdev_client *client; 389 int error; 390 391 client = kzalloc(sizeof(struct evdev_client) + 392 bufsize * sizeof(struct input_event), 393 GFP_KERNEL); 394 if (!client) 395 return -ENOMEM; 396 397 client->bufsize = bufsize; 398 spin_lock_init(&client->buffer_lock); 399 client->evdev = evdev; 400 evdev_attach_client(evdev, client); 401 402 error = evdev_open_device(evdev); 403 if (error) 404 goto err_free_client; 405 406 file->private_data = client; 407 nonseekable_open(inode, file); 408 409 return 0; 410 411 err_free_client: 412 evdev_detach_client(evdev, client); 413 kfree(client); 414 return error; 415 } 416 417 static ssize_t evdev_write(struct file *file, const char __user *buffer, 418 size_t count, loff_t *ppos) 419 { 420 struct evdev_client *client = file->private_data; 421 struct evdev *evdev = client->evdev; 422 struct input_event event; 423 int retval = 0; 424 425 if (count != 0 && count < input_event_size()) 426 return -EINVAL; 427 428 retval = mutex_lock_interruptible(&evdev->mutex); 429 if (retval) 430 return retval; 431 432 if (!evdev->exist) { 433 retval = -ENODEV; 434 goto out; 435 } 436 437 while (retval + input_event_size() <= count) { 438 439 if (input_event_from_user(buffer + retval, &event)) { 440 retval = -EFAULT; 441 goto out; 442 } 443 retval += input_event_size(); 444 445 input_inject_event(&evdev->handle, 446 event.type, event.code, event.value); 447 } 448 449 out: 450 mutex_unlock(&evdev->mutex); 451 return retval; 452 } 453 454 static int evdev_fetch_next_event(struct evdev_client *client, 455 struct input_event *event) 456 { 457 int have_event; 458 459 spin_lock_irq(&client->buffer_lock); 460 461 have_event = client->packet_head != client->tail; 462 if (have_event) { 463 *event = client->buffer[client->tail++]; 464 client->tail &= client->bufsize - 1; 465 } 466 467 spin_unlock_irq(&client->buffer_lock); 468 469 return have_event; 470 } 471 472 static ssize_t evdev_read(struct file *file, char __user *buffer, 473 size_t count, loff_t *ppos) 474 { 475 struct evdev_client *client = file->private_data; 476 struct evdev *evdev = client->evdev; 477 struct input_event event; 478 size_t read = 0; 479 int error; 480 481 if (count != 0 && count < input_event_size()) 482 return -EINVAL; 483 484 for (;;) { 485 if (!evdev->exist) 486 return -ENODEV; 487 488 if (client->packet_head == client->tail && 489 (file->f_flags & O_NONBLOCK)) 490 return -EAGAIN; 491 492 /* 493 * count == 0 is special - no IO is done but we check 494 * for error conditions (see above). 495 */ 496 if (count == 0) 497 break; 498 499 while (read + input_event_size() <= count && 500 evdev_fetch_next_event(client, &event)) { 501 502 if (input_event_to_user(buffer + read, &event)) 503 return -EFAULT; 504 505 read += input_event_size(); 506 } 507 508 if (read) 509 break; 510 511 if (!(file->f_flags & O_NONBLOCK)) { 512 error = wait_event_interruptible(evdev->wait, 513 client->packet_head != client->tail || 514 !evdev->exist); 515 if (error) 516 return error; 517 } 518 } 519 520 return read; 521 } 522 523 /* No kernel lock - fine */ 524 static unsigned int evdev_poll(struct file *file, poll_table *wait) 525 { 526 struct evdev_client *client = file->private_data; 527 struct evdev *evdev = client->evdev; 528 unsigned int mask; 529 530 poll_wait(file, &evdev->wait, wait); 531 532 mask = evdev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR; 533 if (client->packet_head != client->tail) 534 mask |= POLLIN | POLLRDNORM; 535 536 return mask; 537 } 538 539 #ifdef CONFIG_COMPAT 540 541 #define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8) 542 #define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1) 543 544 #ifdef __BIG_ENDIAN 545 static int bits_to_user(unsigned long *bits, unsigned int maxbit, 546 unsigned int maxlen, void __user *p, int compat) 547 { 548 int len, i; 549 550 if (compat) { 551 len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t); 552 if (len > maxlen) 553 len = maxlen; 554 555 for (i = 0; i < len / sizeof(compat_long_t); i++) 556 if (copy_to_user((compat_long_t __user *) p + i, 557 (compat_long_t *) bits + 558 i + 1 - ((i % 2) << 1), 559 sizeof(compat_long_t))) 560 return -EFAULT; 561 } else { 562 len = BITS_TO_LONGS(maxbit) * sizeof(long); 563 if (len > maxlen) 564 len = maxlen; 565 566 if (copy_to_user(p, bits, len)) 567 return -EFAULT; 568 } 569 570 return len; 571 } 572 #else 573 static int bits_to_user(unsigned long *bits, unsigned int maxbit, 574 unsigned int maxlen, void __user *p, int compat) 575 { 576 int len = compat ? 577 BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) : 578 BITS_TO_LONGS(maxbit) * sizeof(long); 579 580 if (len > maxlen) 581 len = maxlen; 582 583 return copy_to_user(p, bits, len) ? -EFAULT : len; 584 } 585 #endif /* __BIG_ENDIAN */ 586 587 #else 588 589 static int bits_to_user(unsigned long *bits, unsigned int maxbit, 590 unsigned int maxlen, void __user *p, int compat) 591 { 592 int len = BITS_TO_LONGS(maxbit) * sizeof(long); 593 594 if (len > maxlen) 595 len = maxlen; 596 597 return copy_to_user(p, bits, len) ? -EFAULT : len; 598 } 599 600 #endif /* CONFIG_COMPAT */ 601 602 static int str_to_user(const char *str, unsigned int maxlen, void __user *p) 603 { 604 int len; 605 606 if (!str) 607 return -ENOENT; 608 609 len = strlen(str) + 1; 610 if (len > maxlen) 611 len = maxlen; 612 613 return copy_to_user(p, str, len) ? -EFAULT : len; 614 } 615 616 #define OLD_KEY_MAX 0x1ff 617 static int handle_eviocgbit(struct input_dev *dev, 618 unsigned int type, unsigned int size, 619 void __user *p, int compat_mode) 620 { 621 static unsigned long keymax_warn_time; 622 unsigned long *bits; 623 int len; 624 625 switch (type) { 626 627 case 0: bits = dev->evbit; len = EV_MAX; break; 628 case EV_KEY: bits = dev->keybit; len = KEY_MAX; break; 629 case EV_REL: bits = dev->relbit; len = REL_MAX; break; 630 case EV_ABS: bits = dev->absbit; len = ABS_MAX; break; 631 case EV_MSC: bits = dev->mscbit; len = MSC_MAX; break; 632 case EV_LED: bits = dev->ledbit; len = LED_MAX; break; 633 case EV_SND: bits = dev->sndbit; len = SND_MAX; break; 634 case EV_FF: bits = dev->ffbit; len = FF_MAX; break; 635 case EV_SW: bits = dev->swbit; len = SW_MAX; break; 636 default: return -EINVAL; 637 } 638 639 /* 640 * Work around bugs in userspace programs that like to do 641 * EVIOCGBIT(EV_KEY, KEY_MAX) and not realize that 'len' 642 * should be in bytes, not in bits. 643 */ 644 if (type == EV_KEY && size == OLD_KEY_MAX) { 645 len = OLD_KEY_MAX; 646 if (printk_timed_ratelimit(&keymax_warn_time, 10 * 1000)) 647 pr_warning("(EVIOCGBIT): Suspicious buffer size %u, " 648 "limiting output to %zu bytes. See " 649 "http://userweb.kernel.org/~dtor/eviocgbit-bug.html\n", 650 OLD_KEY_MAX, 651 BITS_TO_LONGS(OLD_KEY_MAX) * sizeof(long)); 652 } 653 654 return bits_to_user(bits, len, size, p, compat_mode); 655 } 656 #undef OLD_KEY_MAX 657 658 static int evdev_handle_get_keycode(struct input_dev *dev, void __user *p) 659 { 660 struct input_keymap_entry ke = { 661 .len = sizeof(unsigned int), 662 .flags = 0, 663 }; 664 int __user *ip = (int __user *)p; 665 int error; 666 667 /* legacy case */ 668 if (copy_from_user(ke.scancode, p, sizeof(unsigned int))) 669 return -EFAULT; 670 671 error = input_get_keycode(dev, &ke); 672 if (error) 673 return error; 674 675 if (put_user(ke.keycode, ip + 1)) 676 return -EFAULT; 677 678 return 0; 679 } 680 681 static int evdev_handle_get_keycode_v2(struct input_dev *dev, void __user *p) 682 { 683 struct input_keymap_entry ke; 684 int error; 685 686 if (copy_from_user(&ke, p, sizeof(ke))) 687 return -EFAULT; 688 689 error = input_get_keycode(dev, &ke); 690 if (error) 691 return error; 692 693 if (copy_to_user(p, &ke, sizeof(ke))) 694 return -EFAULT; 695 696 return 0; 697 } 698 699 static int evdev_handle_set_keycode(struct input_dev *dev, void __user *p) 700 { 701 struct input_keymap_entry ke = { 702 .len = sizeof(unsigned int), 703 .flags = 0, 704 }; 705 int __user *ip = (int __user *)p; 706 707 if (copy_from_user(ke.scancode, p, sizeof(unsigned int))) 708 return -EFAULT; 709 710 if (get_user(ke.keycode, ip + 1)) 711 return -EFAULT; 712 713 return input_set_keycode(dev, &ke); 714 } 715 716 static int evdev_handle_set_keycode_v2(struct input_dev *dev, void __user *p) 717 { 718 struct input_keymap_entry ke; 719 720 if (copy_from_user(&ke, p, sizeof(ke))) 721 return -EFAULT; 722 723 if (ke.len > sizeof(ke.scancode)) 724 return -EINVAL; 725 726 return input_set_keycode(dev, &ke); 727 } 728 729 /* 730 * If we transfer state to the user, we should flush all pending events 731 * of the same type from the client's queue. Otherwise, they might end up 732 * with duplicate events, which can screw up client's state tracking. 733 * If bits_to_user fails after flushing the queue, we queue a SYN_DROPPED 734 * event so user-space will notice missing events. 735 * 736 * LOCKING: 737 * We need to take event_lock before buffer_lock to avoid dead-locks. But we 738 * need the even_lock only to guarantee consistent state. We can safely release 739 * it while flushing the queue. This allows input-core to handle filters while 740 * we flush the queue. 741 */ 742 static int evdev_handle_get_val(struct evdev_client *client, 743 struct input_dev *dev, unsigned int type, 744 unsigned long *bits, unsigned int max, 745 unsigned int size, void __user *p, int compat) 746 { 747 int ret; 748 unsigned long *mem; 749 750 mem = kmalloc(sizeof(unsigned long) * max, GFP_KERNEL); 751 if (!mem) 752 return -ENOMEM; 753 754 spin_lock_irq(&dev->event_lock); 755 spin_lock(&client->buffer_lock); 756 757 memcpy(mem, bits, sizeof(unsigned long) * max); 758 759 spin_unlock(&dev->event_lock); 760 761 __evdev_flush_queue(client, type); 762 763 spin_unlock_irq(&client->buffer_lock); 764 765 ret = bits_to_user(mem, max, size, p, compat); 766 if (ret < 0) 767 evdev_queue_syn_dropped(client); 768 769 kfree(mem); 770 771 return ret; 772 } 773 774 static int evdev_handle_mt_request(struct input_dev *dev, 775 unsigned int size, 776 int __user *ip) 777 { 778 const struct input_mt *mt = dev->mt; 779 unsigned int code; 780 int max_slots; 781 int i; 782 783 if (get_user(code, &ip[0])) 784 return -EFAULT; 785 if (!mt || !input_is_mt_value(code)) 786 return -EINVAL; 787 788 max_slots = (size - sizeof(__u32)) / sizeof(__s32); 789 for (i = 0; i < mt->num_slots && i < max_slots; i++) { 790 int value = input_mt_get_value(&mt->slots[i], code); 791 if (put_user(value, &ip[1 + i])) 792 return -EFAULT; 793 } 794 795 return 0; 796 } 797 798 static long evdev_do_ioctl(struct file *file, unsigned int cmd, 799 void __user *p, int compat_mode) 800 { 801 struct evdev_client *client = file->private_data; 802 struct evdev *evdev = client->evdev; 803 struct input_dev *dev = evdev->handle.dev; 804 struct input_absinfo abs; 805 struct ff_effect effect; 806 int __user *ip = (int __user *)p; 807 unsigned int i, t, u, v; 808 unsigned int size; 809 int error; 810 811 /* First we check for fixed-length commands */ 812 switch (cmd) { 813 814 case EVIOCGVERSION: 815 return put_user(EV_VERSION, ip); 816 817 case EVIOCGID: 818 if (copy_to_user(p, &dev->id, sizeof(struct input_id))) 819 return -EFAULT; 820 return 0; 821 822 case EVIOCGREP: 823 if (!test_bit(EV_REP, dev->evbit)) 824 return -ENOSYS; 825 if (put_user(dev->rep[REP_DELAY], ip)) 826 return -EFAULT; 827 if (put_user(dev->rep[REP_PERIOD], ip + 1)) 828 return -EFAULT; 829 return 0; 830 831 case EVIOCSREP: 832 if (!test_bit(EV_REP, dev->evbit)) 833 return -ENOSYS; 834 if (get_user(u, ip)) 835 return -EFAULT; 836 if (get_user(v, ip + 1)) 837 return -EFAULT; 838 839 input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u); 840 input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v); 841 842 return 0; 843 844 case EVIOCRMFF: 845 return input_ff_erase(dev, (int)(unsigned long) p, file); 846 847 case EVIOCGEFFECTS: 848 i = test_bit(EV_FF, dev->evbit) ? 849 dev->ff->max_effects : 0; 850 if (put_user(i, ip)) 851 return -EFAULT; 852 return 0; 853 854 case EVIOCGRAB: 855 if (p) 856 return evdev_grab(evdev, client); 857 else 858 return evdev_ungrab(evdev, client); 859 860 case EVIOCSCLOCKID: 861 if (copy_from_user(&i, p, sizeof(unsigned int))) 862 return -EFAULT; 863 if (i != CLOCK_MONOTONIC && i != CLOCK_REALTIME) 864 return -EINVAL; 865 client->clkid = i; 866 return 0; 867 868 case EVIOCGKEYCODE: 869 return evdev_handle_get_keycode(dev, p); 870 871 case EVIOCSKEYCODE: 872 return evdev_handle_set_keycode(dev, p); 873 874 case EVIOCGKEYCODE_V2: 875 return evdev_handle_get_keycode_v2(dev, p); 876 877 case EVIOCSKEYCODE_V2: 878 return evdev_handle_set_keycode_v2(dev, p); 879 } 880 881 size = _IOC_SIZE(cmd); 882 883 /* Now check variable-length commands */ 884 #define EVIOC_MASK_SIZE(nr) ((nr) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT)) 885 switch (EVIOC_MASK_SIZE(cmd)) { 886 887 case EVIOCGPROP(0): 888 return bits_to_user(dev->propbit, INPUT_PROP_MAX, 889 size, p, compat_mode); 890 891 case EVIOCGMTSLOTS(0): 892 return evdev_handle_mt_request(dev, size, ip); 893 894 case EVIOCGKEY(0): 895 return evdev_handle_get_val(client, dev, EV_KEY, dev->key, 896 KEY_MAX, size, p, compat_mode); 897 898 case EVIOCGLED(0): 899 return evdev_handle_get_val(client, dev, EV_LED, dev->led, 900 LED_MAX, size, p, compat_mode); 901 902 case EVIOCGSND(0): 903 return evdev_handle_get_val(client, dev, EV_SND, dev->snd, 904 SND_MAX, size, p, compat_mode); 905 906 case EVIOCGSW(0): 907 return evdev_handle_get_val(client, dev, EV_SW, dev->sw, 908 SW_MAX, size, p, compat_mode); 909 910 case EVIOCGNAME(0): 911 return str_to_user(dev->name, size, p); 912 913 case EVIOCGPHYS(0): 914 return str_to_user(dev->phys, size, p); 915 916 case EVIOCGUNIQ(0): 917 return str_to_user(dev->uniq, size, p); 918 919 case EVIOC_MASK_SIZE(EVIOCSFF): 920 if (input_ff_effect_from_user(p, size, &effect)) 921 return -EFAULT; 922 923 error = input_ff_upload(dev, &effect, file); 924 925 if (put_user(effect.id, &(((struct ff_effect __user *)p)->id))) 926 return -EFAULT; 927 928 return error; 929 } 930 931 /* Multi-number variable-length handlers */ 932 if (_IOC_TYPE(cmd) != 'E') 933 return -EINVAL; 934 935 if (_IOC_DIR(cmd) == _IOC_READ) { 936 937 if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0, 0))) 938 return handle_eviocgbit(dev, 939 _IOC_NR(cmd) & EV_MAX, size, 940 p, compat_mode); 941 942 if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) { 943 944 if (!dev->absinfo) 945 return -EINVAL; 946 947 t = _IOC_NR(cmd) & ABS_MAX; 948 abs = dev->absinfo[t]; 949 950 if (copy_to_user(p, &abs, min_t(size_t, 951 size, sizeof(struct input_absinfo)))) 952 return -EFAULT; 953 954 return 0; 955 } 956 } 957 958 if (_IOC_DIR(cmd) == _IOC_WRITE) { 959 960 if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) { 961 962 if (!dev->absinfo) 963 return -EINVAL; 964 965 t = _IOC_NR(cmd) & ABS_MAX; 966 967 if (copy_from_user(&abs, p, min_t(size_t, 968 size, sizeof(struct input_absinfo)))) 969 return -EFAULT; 970 971 if (size < sizeof(struct input_absinfo)) 972 abs.resolution = 0; 973 974 /* We can't change number of reserved MT slots */ 975 if (t == ABS_MT_SLOT) 976 return -EINVAL; 977 978 /* 979 * Take event lock to ensure that we are not 980 * changing device parameters in the middle 981 * of event. 982 */ 983 spin_lock_irq(&dev->event_lock); 984 dev->absinfo[t] = abs; 985 spin_unlock_irq(&dev->event_lock); 986 987 return 0; 988 } 989 } 990 991 return -EINVAL; 992 } 993 994 static long evdev_ioctl_handler(struct file *file, unsigned int cmd, 995 void __user *p, int compat_mode) 996 { 997 struct evdev_client *client = file->private_data; 998 struct evdev *evdev = client->evdev; 999 int retval; 1000 1001 retval = mutex_lock_interruptible(&evdev->mutex); 1002 if (retval) 1003 return retval; 1004 1005 if (!evdev->exist) { 1006 retval = -ENODEV; 1007 goto out; 1008 } 1009 1010 retval = evdev_do_ioctl(file, cmd, p, compat_mode); 1011 1012 out: 1013 mutex_unlock(&evdev->mutex); 1014 return retval; 1015 } 1016 1017 static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 1018 { 1019 return evdev_ioctl_handler(file, cmd, (void __user *)arg, 0); 1020 } 1021 1022 #ifdef CONFIG_COMPAT 1023 static long evdev_ioctl_compat(struct file *file, 1024 unsigned int cmd, unsigned long arg) 1025 { 1026 return evdev_ioctl_handler(file, cmd, compat_ptr(arg), 1); 1027 } 1028 #endif 1029 1030 static const struct file_operations evdev_fops = { 1031 .owner = THIS_MODULE, 1032 .read = evdev_read, 1033 .write = evdev_write, 1034 .poll = evdev_poll, 1035 .open = evdev_open, 1036 .release = evdev_release, 1037 .unlocked_ioctl = evdev_ioctl, 1038 #ifdef CONFIG_COMPAT 1039 .compat_ioctl = evdev_ioctl_compat, 1040 #endif 1041 .fasync = evdev_fasync, 1042 .flush = evdev_flush, 1043 .llseek = no_llseek, 1044 }; 1045 1046 /* 1047 * Mark device non-existent. This disables writes, ioctls and 1048 * prevents new users from opening the device. Already posted 1049 * blocking reads will stay, however new ones will fail. 1050 */ 1051 static void evdev_mark_dead(struct evdev *evdev) 1052 { 1053 mutex_lock(&evdev->mutex); 1054 evdev->exist = false; 1055 mutex_unlock(&evdev->mutex); 1056 } 1057 1058 static void evdev_cleanup(struct evdev *evdev) 1059 { 1060 struct input_handle *handle = &evdev->handle; 1061 1062 evdev_mark_dead(evdev); 1063 evdev_hangup(evdev); 1064 1065 cdev_del(&evdev->cdev); 1066 1067 /* evdev is marked dead so no one else accesses evdev->open */ 1068 if (evdev->open) { 1069 input_flush_device(handle, NULL); 1070 input_close_device(handle); 1071 } 1072 } 1073 1074 /* 1075 * Create new evdev device. Note that input core serializes calls 1076 * to connect and disconnect. 1077 */ 1078 static int evdev_connect(struct input_handler *handler, struct input_dev *dev, 1079 const struct input_device_id *id) 1080 { 1081 struct evdev *evdev; 1082 int minor; 1083 int dev_no; 1084 int error; 1085 1086 minor = input_get_new_minor(EVDEV_MINOR_BASE, EVDEV_MINORS, true); 1087 if (minor < 0) { 1088 error = minor; 1089 pr_err("failed to reserve new minor: %d\n", error); 1090 return error; 1091 } 1092 1093 evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL); 1094 if (!evdev) { 1095 error = -ENOMEM; 1096 goto err_free_minor; 1097 } 1098 1099 INIT_LIST_HEAD(&evdev->client_list); 1100 spin_lock_init(&evdev->client_lock); 1101 mutex_init(&evdev->mutex); 1102 init_waitqueue_head(&evdev->wait); 1103 evdev->exist = true; 1104 1105 dev_no = minor; 1106 /* Normalize device number if it falls into legacy range */ 1107 if (dev_no < EVDEV_MINOR_BASE + EVDEV_MINORS) 1108 dev_no -= EVDEV_MINOR_BASE; 1109 dev_set_name(&evdev->dev, "event%d", dev_no); 1110 1111 evdev->handle.dev = input_get_device(dev); 1112 evdev->handle.name = dev_name(&evdev->dev); 1113 evdev->handle.handler = handler; 1114 evdev->handle.private = evdev; 1115 1116 evdev->dev.devt = MKDEV(INPUT_MAJOR, minor); 1117 evdev->dev.class = &input_class; 1118 evdev->dev.parent = &dev->dev; 1119 evdev->dev.release = evdev_free; 1120 device_initialize(&evdev->dev); 1121 1122 error = input_register_handle(&evdev->handle); 1123 if (error) 1124 goto err_free_evdev; 1125 1126 cdev_init(&evdev->cdev, &evdev_fops); 1127 evdev->cdev.kobj.parent = &evdev->dev.kobj; 1128 error = cdev_add(&evdev->cdev, evdev->dev.devt, 1); 1129 if (error) 1130 goto err_unregister_handle; 1131 1132 error = device_add(&evdev->dev); 1133 if (error) 1134 goto err_cleanup_evdev; 1135 1136 return 0; 1137 1138 err_cleanup_evdev: 1139 evdev_cleanup(evdev); 1140 err_unregister_handle: 1141 input_unregister_handle(&evdev->handle); 1142 err_free_evdev: 1143 put_device(&evdev->dev); 1144 err_free_minor: 1145 input_free_minor(minor); 1146 return error; 1147 } 1148 1149 static void evdev_disconnect(struct input_handle *handle) 1150 { 1151 struct evdev *evdev = handle->private; 1152 1153 device_del(&evdev->dev); 1154 evdev_cleanup(evdev); 1155 input_free_minor(MINOR(evdev->dev.devt)); 1156 input_unregister_handle(handle); 1157 put_device(&evdev->dev); 1158 } 1159 1160 static const struct input_device_id evdev_ids[] = { 1161 { .driver_info = 1 }, /* Matches all devices */ 1162 { }, /* Terminating zero entry */ 1163 }; 1164 1165 MODULE_DEVICE_TABLE(input, evdev_ids); 1166 1167 static struct input_handler evdev_handler = { 1168 .event = evdev_event, 1169 .events = evdev_events, 1170 .connect = evdev_connect, 1171 .disconnect = evdev_disconnect, 1172 .legacy_minors = true, 1173 .minor = EVDEV_MINOR_BASE, 1174 .name = "evdev", 1175 .id_table = evdev_ids, 1176 }; 1177 1178 static int __init evdev_init(void) 1179 { 1180 return input_register_handler(&evdev_handler); 1181 } 1182 1183 static void __exit evdev_exit(void) 1184 { 1185 input_unregister_handler(&evdev_handler); 1186 } 1187 1188 module_init(evdev_init); 1189 module_exit(evdev_exit); 1190 1191 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); 1192 MODULE_DESCRIPTION("Input driver event char devices"); 1193 MODULE_LICENSE("GPL"); 1194