aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.14/950-0149-vcsm-Support-for-finding-user-vc-handle-in-memory-po.patch
blob: 25945fa370ef18744a20d3e71556a4078e62a139 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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",