e_input: add missing mutex for keymap 45/303645/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 2 Jan 2024 02:54:14 +0000 (11:54 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 3 Jan 2024 04:19:03 +0000 (13:19 +0900)
missing_lock: Accessing e_comp_wl->xkb.keymap without holding lock _E_Comp_Wl_Data.xkb.keymap_mutex.
Elsewhere, _E_Comp_Wl_Data.xkb.keymap is written to with _E_Comp_Wl_Data.xkb.keymap_mutex held 3 out of 4 times (1 of these accesses strongly imply that it is necessary).

Change-Id: I9e682d9b3a8862b92e789ddac9eb9eb82177527d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_comp_wl.c
src/bin/e_devicemgr_input.c
src/bin/e_keyrouter.c

index 6b86ff3e66566382c87933a8d2c196f19c8cb4cb..c7ea9d9c980f36e13e618ae66935027b6e089752 100644 (file)
@@ -4793,11 +4793,16 @@ e_comp_wl_key_cancel(E_Client *ec, int keycode, Ecore_Device *dev, uint32_t time
    Eina_List *l;
    uint32_t serial, wl_keycode, cancel_keycode;
    E_Comp_Config *comp_conf = NULL;
+   struct xkb_keymap *keymap = NULL;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(ec->comp_data, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.keymap, EINA_FALSE);
+
+   g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
+   keymap = e_comp_wl->xkb.keymap;
+   g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, EINA_FALSE);
 
    struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
    EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
index e8bad06a502cd713a39869b9a721338e96375026..f94c09fa80d2f397845e819eba9085856bb731b7 100644 (file)
@@ -153,8 +153,13 @@ _e_devicemgr_input_mouse_button_remap(Ecore_Event_Mouse_Button *ev, Eina_Bool pr
 {
    Ecore_Event_Key *ev_key;
    E_Keyrouter_Event_Data *key_data;
+   struct xkb_keymap *keymap = NULL;
 
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.keymap, ECORE_CALLBACK_PASS_ON);
+   g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
+   keymap = e_comp_wl->xkb.keymap;
+   g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, ECORE_CALLBACK_PASS_ON);
    EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
 
    if (ev->buttons != 3) return ECORE_CALLBACK_PASS_ON;
index 8effe3eed72b0343e3edaef2fee4bf4ac0b8775d..d4c1582c9a6df6fc1c2936170fc09bbdd1b5484c 100644 (file)
@@ -469,7 +469,9 @@ _e_keyrouter_query_tizen_key_table(void)
         KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
         res = unlink(e_comp_wl_input_keymap_path_get(names));
 
+        g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
         e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_wl->xkb.context), xkb_keymap_ref(e_comp_wl->xkb.keymap));
+        g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
      }
    else
      KLINF("Currently cache file is exist. Do not change it.");