Skip to content

Commit

Permalink
Kernel: Unbreak sys$setkeymap()
Browse files Browse the repository at this point in the history
This syscall was disabling SMAP too late and would crash every time
when trying to set a new keymap.
  • Loading branch information
awesomekling committed Jun 17, 2020
1 parent 2ad1c2d commit 10fd862
Showing 1 changed file with 8 additions and 16 deletions.
24 changes: 8 additions & 16 deletions Kernel/Process.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 10fd862

Please sign in to comment.