mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-23 21:15:14 +00:00
Kernel: Unbreak sys$setkeymap()
This syscall was disabling SMAP too late and would crash every time when trying to set a new keymap.
This commit is contained in:
parent
2ad1c2d959
commit
10fd862a55
Notes:
sideshowbarker
2024-07-19 05:35:24 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/10fd862a556
1 changed files with 8 additions and 16 deletions
|
@ -4305,28 +4305,20 @@ int Process::sys$setkeymap(const Syscall::SC_setkeymap_params* user_params)
|
|||
|
||||
Keyboard::CharacterMapData character_map_data;
|
||||
|
||||
const u32* map = params.map;
|
||||
const u32* shift_map = params.shift_map;
|
||||
const u32* alt_map = params.alt_map;
|
||||
const u32* altgr_map = params.altgr_map;
|
||||
|
||||
if (!validate_read(map, CHAR_MAP_SIZE))
|
||||
if (!validate_read(params.map, CHAR_MAP_SIZE))
|
||||
return -EFAULT;
|
||||
if (!validate_read(shift_map, CHAR_MAP_SIZE))
|
||||
if (!validate_read(params.shift_map, CHAR_MAP_SIZE))
|
||||
return -EFAULT;
|
||||
if (!validate_read(alt_map, CHAR_MAP_SIZE))
|
||||
if (!validate_read(params.alt_map, CHAR_MAP_SIZE))
|
||||
return -EFAULT;
|
||||
if (!validate_read(altgr_map, CHAR_MAP_SIZE))
|
||||
if (!validate_read(params.altgr_map, CHAR_MAP_SIZE))
|
||||
return -EFAULT;
|
||||
|
||||
for (int i = 0; i < CHAR_MAP_SIZE; i++) {
|
||||
character_map_data.map[i] = map[i];
|
||||
character_map_data.shift_map[i] = shift_map[i];
|
||||
character_map_data.alt_map[i] = alt_map[i];
|
||||
character_map_data.altgr_map[i] = altgr_map[i];
|
||||
}
|
||||
copy_from_user(character_map_data.map, params.map, CHAR_MAP_SIZE * sizeof(u32));
|
||||
copy_from_user(character_map_data.shift_map, params.shift_map, CHAR_MAP_SIZE * sizeof(u32));
|
||||
copy_from_user(character_map_data.alt_map, params.alt_map, CHAR_MAP_SIZE * sizeof(u32));
|
||||
copy_from_user(character_map_data.altgr_map, params.altgr_map, CHAR_MAP_SIZE * sizeof(u32));
|
||||
|
||||
SmapDisabler disabler;
|
||||
KeyboardDevice::the().set_maps(character_map_data);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue