mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 20:33:58 -04:00
msm: adsprpc: Handle UAF in fastrpc debugfs read
Use lock to protect maps amongst multiple threads to avoid race condition. Change-Id: Ib0c83dd38ea8e5acb54a1478d10b02385c27ba31 Signed-off-by: Swathi K <quic_c_kataka@quicinc.com>
This commit is contained in:
parent
d6a2023cd2
commit
da2bdbc797
1 changed files with 10 additions and 1 deletions
|
|
@ -5350,6 +5350,7 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
|||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%s%s%s%s%s\n", single_line, single_line,
|
||||
single_line, single_line, single_line);
|
||||
spin_lock(&me->hlock);
|
||||
hlist_for_each_entry_safe(gmaps, n, &me->maps, hn) {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20d|0x%-18llX|0x%-18X|0x%-20lX\n\n",
|
||||
|
|
@ -5357,18 +5358,21 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
|||
(uint32_t)gmaps->size,
|
||||
gmaps->va);
|
||||
}
|
||||
spin_unlock(&me->hlock);
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20s|%-20s|%-20s|%-20s\n",
|
||||
"len", "refs", "raddr", "flags");
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%s%s%s%s%s\n", single_line, single_line,
|
||||
single_line, single_line, single_line);
|
||||
spin_lock(&me->hlock);
|
||||
hlist_for_each_entry_safe(gmaps, n, &me->maps, hn) {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"0x%-18X|%-20d|%-20lu|%-20u\n",
|
||||
(uint32_t)gmaps->len, gmaps->refs,
|
||||
gmaps->raddr, gmaps->flags);
|
||||
}
|
||||
spin_unlock(&me->hlock);
|
||||
} else {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"\n%s %13s %d\n", "cid", ":", fl->cid);
|
||||
|
|
@ -5410,12 +5414,14 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
|||
"%s%s%s%s%s\n",
|
||||
single_line, single_line, single_line,
|
||||
single_line, single_line);
|
||||
mutex_lock(&fl->map_mutex);
|
||||
hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"0x%-20lX|0x%-20llX|0x%-20zu\n\n",
|
||||
map->va, map->phys,
|
||||
map->size);
|
||||
}
|
||||
mutex_unlock(&fl->map_mutex);
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20s|%-20s|%-20s|%-20s\n",
|
||||
"len", "refs",
|
||||
|
|
@ -5424,24 +5430,27 @@ static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
|
|||
"%s%s%s%s%s\n",
|
||||
single_line, single_line, single_line,
|
||||
single_line, single_line);
|
||||
mutex_lock(&fl->map_mutex);
|
||||
hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20zu|%-20d|0x%-20lX|%-20d\n\n",
|
||||
map->len, map->refs, map->raddr,
|
||||
map->uncached);
|
||||
}
|
||||
mutex_unlock(&fl->map_mutex);
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20s|%-20s\n", "secure", "attr");
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%s%s%s%s%s\n",
|
||||
single_line, single_line, single_line,
|
||||
single_line, single_line);
|
||||
mutex_lock(&fl->map_mutex);
|
||||
hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"%-20d|0x%-20lX\n\n",
|
||||
map->secure, map->attr);
|
||||
}
|
||||
|
||||
mutex_unlock(&fl->map_mutex);
|
||||
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
|
||||
"\n======%s %s %s======\n", title,
|
||||
" LIST OF BUFS ", title);
|
||||
|
|
|
|||
Loading…
Reference in a new issue