Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: evdev - fix EVIOCSABS regression Input: evdev - fix Ooops in EVIOCGABS/EVIOCSABS
This commit is contained in:
Коммит
b0579fc089
|
@ -669,6 +669,9 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
|
||||||
|
|
||||||
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
|
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
|
||||||
|
|
||||||
|
if (!dev->absinfo)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
t = _IOC_NR(cmd) & ABS_MAX;
|
t = _IOC_NR(cmd) & ABS_MAX;
|
||||||
abs = dev->absinfo[t];
|
abs = dev->absinfo[t];
|
||||||
|
|
||||||
|
@ -680,10 +683,13 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_IOC_DIR(cmd) == _IOC_READ) {
|
if (_IOC_DIR(cmd) == _IOC_WRITE) {
|
||||||
|
|
||||||
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
|
if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
|
||||||
|
|
||||||
|
if (!dev->absinfo)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
t = _IOC_NR(cmd) & ABS_MAX;
|
t = _IOC_NR(cmd) & ABS_MAX;
|
||||||
|
|
||||||
if (copy_from_user(&abs, p, min_t(size_t,
|
if (copy_from_user(&abs, p, min_t(size_t,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче