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