summaryrefslogtreecommitdiff
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorShreyas Narayan <shrena@codeaurora.org>2020-09-14 17:13:33 +0530
committerShreyas Narayan <shrena@codeaurora.org>2020-09-14 17:15:00 +0530
commitdb4c33c3dd0f75e698d0f924bf95e9817d6965a6 (patch)
tree5f6e5a494afcd5a50e4186f4b7590541c1603f8f /drivers/input/input.c
parentbd9d4a22f03f5170047c381f0ec94ee2d48cd4e2 (diff)
parent353b81f1fbec379322908cec16dcb7f6b3167fb6 (diff)
Merge commit '353b81f1fbec379322908cec16dcb7f6b3167fb6' into HEAD
Change-Id: Iafd90cd872113e0aaceb66ff7bae9607dd073428 Signed-off-by: Shreyas Narayan <shrena@codeaurora.org>
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r--drivers/input/input.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index baaddd168804..857917086cb0 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -851,16 +851,18 @@ static int input_default_setkeycode(struct input_dev *dev,
}
}
- __clear_bit(*old_keycode, dev->keybit);
- __set_bit(ke->keycode, dev->keybit);
-
- for (i = 0; i < dev->keycodemax; i++) {
- if (input_fetch_keycode(dev, i) == *old_keycode) {
- __set_bit(*old_keycode, dev->keybit);
- break; /* Setting the bit twice is useless, so break */
+ if (*old_keycode <= KEY_MAX) {
+ __clear_bit(*old_keycode, dev->keybit);
+ for (i = 0; i < dev->keycodemax; i++) {
+ if (input_fetch_keycode(dev, i) == *old_keycode) {
+ __set_bit(*old_keycode, dev->keybit);
+ /* Setting the bit twice is useless, so break */
+ break;
+ }
}
}
+ __set_bit(ke->keycode, dev->keybit);
return 0;
}
@@ -916,9 +918,13 @@ int input_set_keycode(struct input_dev *dev,
* Simulate keyup event if keycode is not present
* in the keymap anymore
*/
- if (test_bit(EV_KEY, dev->evbit) &&
- !is_event_supported(old_keycode, dev->keybit, KEY_MAX) &&
- __test_and_clear_bit(old_keycode, dev->key)) {
+ if (old_keycode > KEY_MAX) {
+ dev_warn(dev->dev.parent ?: &dev->dev,
+ "%s: got too big old keycode %#x\n",
+ __func__, old_keycode);
+ } else if (test_bit(EV_KEY, dev->evbit) &&
+ !is_event_supported(old_keycode, dev->keybit, KEY_MAX) &&
+ __test_and_clear_bit(old_keycode, dev->key)) {
struct input_value vals[] = {
{ EV_KEY, old_keycode, 0 },
input_value_sync