]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/input/evdev.c
Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[karo-tx-linux.git] / drivers / input / evdev.c
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");