diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch b/target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch new file mode 100644 index 0000000000..25945fa370 --- /dev/null +++ b/target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch @@ -0,0 +1,42 @@ +From ef55290ab88bb9a640bb0ab7213b6827c7207ee6 Mon Sep 17 00:00:00 2001 +From: Sugizaki Yukimasa <i.can.speak.c.and.basic@gmail.com> +Date: Fri, 5 Jan 2018 00:01:30 +0900 +Subject: [PATCH 149/454] vcsm: Support for finding user/vc handle in memory + pool + +vmcs_sm_{usr,vc}_handle_from_pid_and_address() were failing to find +handle if specified user pointer is not exactly the one that the memory +locking call returned even if the pointer is in range of map/resource. +So fixed the functions to match the range. + +Signed-off-by: Sugizaki Yukimasa <i.can.speak.c.and.basic@gmail.com> +--- + drivers/char/broadcom/vc_sm/vmcs_sm.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +--- a/drivers/char/broadcom/vc_sm/vmcs_sm.c ++++ b/drivers/char/broadcom/vc_sm/vmcs_sm.c +@@ -276,7 +276,10 @@ static unsigned int vmcs_sm_vc_handle_fr + /* Lookup the resource. */ + if (!list_empty(&sm_state->map_list)) { + list_for_each_entry(map, &sm_state->map_list, map_list) { +- if (map->res_pid != pid || map->res_addr != addr) ++ if (map->res_pid != pid) ++ continue; ++ if (!(map->res_addr <= addr && ++ addr < map->res_addr + map->resource->res_size)) + continue; + + pr_debug("[%s]: global map %p (pid %u, addr %lx) -> vc-hdl %x (usr-hdl %x)\n", +@@ -326,7 +329,10 @@ static unsigned int vmcs_sm_usr_handle_f + /* Lookup the resource. */ + if (!list_empty(&sm_state->map_list)) { + list_for_each_entry(map, &sm_state->map_list, map_list) { +- if (map->res_pid != pid || map->res_addr != addr) ++ if (map->res_pid != pid) ++ continue; ++ if (!(map->res_addr <= addr && ++ addr < map->res_addr + map->resource->res_size)) + continue; + + pr_debug("[%s]: global map %p (pid %u, addr %lx) -> usr-hdl %x (vc-hdl %x)\n", |