Skip to content

Commit

Permalink
drm/nouveau: make use of drm_gpuvm_range_valid()
Browse files Browse the repository at this point in the history
Use drm_gpuvm_range_valid() in order to validate userspace requests.

Reviewed-by: Dave Airlie <[email protected]>
Signed-off-by: Danilo Krummrich <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
dakr committed Nov 13, 2023
1 parent 9297cfc commit b41e297
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 19 deletions.
17 changes: 1 addition & 16 deletions drivers/gpu/drm/nouveau/nouveau_uvmm.c
Original file line number Diff line number Diff line change
Expand Up @@ -929,25 +929,13 @@ nouveau_uvmm_sm_unmap_cleanup(struct nouveau_uvmm *uvmm,
static int
nouveau_uvmm_validate_range(struct nouveau_uvmm *uvmm, u64 addr, u64 range)
{
u64 end = addr + range;
u64 kernel_managed_end = uvmm->kernel_managed_addr +
uvmm->kernel_managed_size;

if (addr & ~PAGE_MASK)
return -EINVAL;

if (range & ~PAGE_MASK)
return -EINVAL;

if (end <= addr)
return -EINVAL;

if (addr < NOUVEAU_VA_SPACE_START ||
end > NOUVEAU_VA_SPACE_END)
return -EINVAL;

if (addr < kernel_managed_end &&
end > uvmm->kernel_managed_addr)
if (!drm_gpuvm_range_valid(&uvmm->base, addr, range))
return -EINVAL;

return 0;
Expand Down Expand Up @@ -1834,9 +1822,6 @@ nouveau_uvmm_init(struct nouveau_uvmm *uvmm, struct nouveau_cli *cli,
goto out_unlock;
}

uvmm->kernel_managed_addr = kernel_managed_addr;
uvmm->kernel_managed_size = kernel_managed_size;

drm_gpuvm_init(&uvmm->base, cli->name, drm,
NOUVEAU_VA_SPACE_START,
NOUVEAU_VA_SPACE_END,
Expand Down
3 changes: 0 additions & 3 deletions drivers/gpu/drm/nouveau/nouveau_uvmm.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ struct nouveau_uvmm {
struct mutex mutex;
struct dma_resv resv;

u64 kernel_managed_addr;
u64 kernel_managed_size;

bool disabled;
};

Expand Down

0 comments on commit b41e297

Please sign in to comment.