diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-11-04 15:49:06 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-11-04 15:49:06 +0000 |
| commit | 2a22df74e9fceaffd62ee437de08383d6cf8cfe0 (patch) | |
| tree | d4887f0719a9a8b98c787012703fa65e21554dc8 /sys/dev/evdev/cdev.c | |
| parent | 689486003b2d4637b61b61d5a30bf98fb11ddc16 (diff) | |
| parent | 6d080f8660b370f83eb10a840b6d14b6dd84a1de (diff) | |
Notes
Diffstat (limited to 'sys/dev/evdev/cdev.c')
| -rw-r--r-- | sys/dev/evdev/cdev.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/dev/evdev/cdev.c b/sys/dev/evdev/cdev.c index 433444973779..615a70bafc79 100644 --- a/sys/dev/evdev/cdev.c +++ b/sys/dev/evdev/cdev.c @@ -349,6 +349,19 @@ evdev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, if (client->ec_revoked || evdev == NULL) return (ENODEV); + /* + * Fix evdev state corrupted with discarding of kdb events. + * EVIOCGKEY and EVIOCGLED ioctls can suffer from this. + */ + if (evdev->ev_kdb_active) { + EVDEV_LOCK(evdev); + if (evdev->ev_kdb_active) { + evdev->ev_kdb_active = false; + evdev_restore_after_kdb(evdev); + } + EVDEV_UNLOCK(evdev); + } + /* file I/O ioctl handling */ switch (cmd) { case FIOSETOWN: |
