uio: Enable read-only mappings

This allows to tag memory regions read-only, denying userspace to map
them writable. Default remains read/write.

Acked-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
Jan Kiszka 2019-06-04 14:40:09 +02:00 committed by Peng Fan
parent a1a73e42a4
commit 014f0b6109
2 changed files with 11 additions and 0 deletions

View File

@ -790,6 +790,15 @@ static int uio_mmap(struct file *filep, struct vm_area_struct *vma)
goto out;
}
if (idev->info->mem[mi].readonly) {
if (vma->vm_flags & VM_WRITE) {
ret = -EINVAL;
goto out;
}
vma->vm_flags &= ~VM_MAYWRITE;
}
if (idev->info->mmap) {
ret = idev->info->mmap(idev->info, vma);
goto out;

View File

@ -31,6 +31,7 @@ struct uio_map;
* @offs: offset of device memory within the page
* @size: size of IO (multiple of page size)
* @memtype: type of memory addr points to
* @readonly: true of region is read-only
* @internal_addr: ioremap-ped version of addr, for driver internal use
* @map: for use by the UIO core only.
*/
@ -40,6 +41,7 @@ struct uio_mem {
unsigned long offs;
resource_size_t size;
int memtype;
bool readonly;
void __iomem *internal_addr;
struct uio_map *map;
};