diff options
author | Hridya Valsaraju <hridya@google.com> | 2021-07-25 20:49:06 -0700 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2021-11-04 19:18:11 +0200 |
commit | a06e8dad298e5e4c9c58b14535d69ea77bb1118b (patch) | |
tree | 1c6035221c74e3c2b50687deed99bee3430ad29f /drivers/cpuidle/sysfs.c | |
parent | 0e3b56cdb412e1bc868db2e7649fb6978269e196 (diff) |
ANDROID: staging: ion: move buffer kmap from begin/end_cpu_access()
Since dma_buf_begin/end_cpu_access() calls always used to bracket
dma_buf_kmap/kunmap calls, ION performed kmap/kunmap invocations for the
buffer during dma_buf_begin/end_cpu_access() calls and cached the
results with a kmap counter.
However, dma_buf_begin/end_cpu_access() invocations can be
triggered from the userspace using the DMA_BUF_IOC_SYNC ioctl as well.
This means that a mapping that was created by a device driver using by a
dma_buf_kmap() call or an ion_map_kernel() call could be unmapped
from userspace if a client accidentally(or maliciously) invoked
DMA_BUF_IOCTL_SYNC IOCTL with 'DMA_BUF_SYNC_END' argument since this
would inturn invoke dma_buf_end_cpu_access() which would then decrement
the kmap counter and invoke kunmap() when the counter gets to 0.
This patch moves the kmap/kunmap operations from the
begin/end_cpu_access() DMA-BUF ops to the map/unmap DMA-BUF ops to
prevent the issue.
Bug: 187527909
Change-Id: I00dc8eefefb1f3aab99e770f90d624011f7740f0
[hridya: minor conflicts during cherry-picking]
Signed-off-by: Hridya Valsaraju <hridya@google.com>
Diffstat (limited to 'drivers/cpuidle/sysfs.c')
0 files changed, 0 insertions, 0 deletions