diff --git a/bsd-core/drm_vm.c b/bsd-core/drm_vm.c index 814cc8bf..fc0c4a78 100644 --- a/bsd-core/drm_vm.c +++ b/bsd-core/drm_vm.c @@ -26,6 +26,8 @@ int DRM(mmap)(dev_t kdev, vm_offset_t offset, int prot) /* DRM_DEBUG("offset = 0x%x\n", offset);*/ + if (!priv->authenticated) DRM_OS_RETURN(EACCES); + if (dev->dma && offset >= 0 && offset < ptoa(dev->dma->page_count)) diff --git a/bsd/drm_vm.h b/bsd/drm_vm.h index 814cc8bf..fc0c4a78 100644 --- a/bsd/drm_vm.h +++ b/bsd/drm_vm.h @@ -26,6 +26,8 @@ int DRM(mmap)(dev_t kdev, vm_offset_t offset, int prot) /* DRM_DEBUG("offset = 0x%x\n", offset);*/ + if (!priv->authenticated) DRM_OS_RETURN(EACCES); + if (dev->dma && offset >= 0 && offset < ptoa(dev->dma->page_count)) diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c index 771c11bd..f7b06767 100644 --- a/linux-core/drm_vm.c +++ b/linux-core/drm_vm.c @@ -377,6 +377,8 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma) DRM_DEBUG("start = 0x%lx, end = 0x%lx, offset = 0x%lx\n", vma->vm_start, vma->vm_end, VM_OFFSET(vma)); + if ( !priv->authenticated ) DRM_OS_RETURN(EACCES); + if (!VM_OFFSET(vma)) return DRM(mmap_dma)(filp, vma); /* A sequential search of a linked list is diff --git a/linux/drm_vm.h b/linux/drm_vm.h index 771c11bd..f7b06767 100644 --- a/linux/drm_vm.h +++ b/linux/drm_vm.h @@ -377,6 +377,8 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma) DRM_DEBUG("start = 0x%lx, end = 0x%lx, offset = 0x%lx\n", vma->vm_start, vma->vm_end, VM_OFFSET(vma)); + if ( !priv->authenticated ) DRM_OS_RETURN(EACCES); + if (!VM_OFFSET(vma)) return DRM(mmap_dma)(filp, vma); /* A sequential search of a linked list is