@@ -858,16 +858,18 @@ static int input_default_setkeycode(struct input_dev *dev,
858
858
}
859
859
}
860
860
861
- __clear_bit (* old_keycode , dev -> keybit );
862
- __set_bit (ke -> keycode , dev -> keybit );
863
-
864
- for (i = 0 ; i < dev -> keycodemax ; i ++ ) {
865
- if (input_fetch_keycode (dev , i ) == * old_keycode ) {
866
- __set_bit (* old_keycode , dev -> keybit );
867
- break ; /* Setting the bit twice is useless, so break */
861
+ if (* old_keycode <= KEY_MAX ) {
862
+ __clear_bit (* old_keycode , dev -> keybit );
863
+ for (i = 0 ; i < dev -> keycodemax ; i ++ ) {
864
+ if (input_fetch_keycode (dev , i ) == * old_keycode ) {
865
+ __set_bit (* old_keycode , dev -> keybit );
866
+ /* Setting the bit twice is useless, so break */
867
+ break ;
868
+ }
868
869
}
869
870
}
870
871
872
+ __set_bit (ke -> keycode , dev -> keybit );
871
873
return 0 ;
872
874
}
873
875
@@ -923,9 +925,13 @@ int input_set_keycode(struct input_dev *dev,
923
925
* Simulate keyup event if keycode is not present
924
926
* in the keymap anymore
925
927
*/
926
- if (test_bit (EV_KEY , dev -> evbit ) &&
927
- !is_event_supported (old_keycode , dev -> keybit , KEY_MAX ) &&
928
- __test_and_clear_bit (old_keycode , dev -> key )) {
928
+ if (old_keycode > KEY_MAX ) {
929
+ dev_warn (dev -> dev .parent ?: & dev -> dev ,
930
+ "%s: got too big old keycode %#x\n" ,
931
+ __func__ , old_keycode );
932
+ } else if (test_bit (EV_KEY , dev -> evbit ) &&
933
+ !is_event_supported (old_keycode , dev -> keybit , KEY_MAX ) &&
934
+ __test_and_clear_bit (old_keycode , dev -> key )) {
929
935
struct input_value vals [] = {
930
936
{ EV_KEY , old_keycode , 0 },
931
937
input_value_sync
0 commit comments