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