From 10fd862a5562ff96d8abd45c46b9ff17e24820a5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 17 Jun 2020 20:32:53 +0200 Subject: [PATCH] Kernel: Unbreak sys$setkeymap() This syscall was disabling SMAP too late and would crash every time when trying to set a new keymap. --- Kernel/Process.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 9c066baf95..e91b38f1e0 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -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; }