[PATCH 1/5] drm/amdgpu: allow variable BO struct creation
Christian König
ckoenig.leichtzumerken at gmail.com
Fri Mar 5 15:15:24 UTC 2021
Am 05.03.21 um 16:06 schrieb Nirmoy Das:
> Allow allocating BO structures with different structure size
> than struct amdgpu_bo.
>
> Signed-off-by: Nirmoy Das <nirmoy.das at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 10 +++++++++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 +
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 0bd22ed1dacf..1ff8c3570c82 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -551,8 +551,12 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
>
> acc_size = ttm_bo_dma_acc_size(&adev->mman.bdev, size,
> sizeof(struct amdgpu_bo));
> + if (bp->bo_ptr_size < sizeof(struct amdgpu_bo)) {
> + DRM_ERROR("can't create BO with size < struct amdgpu_bo\n");
> + return -EINVAL;
> + }
Please make this a BUG_ON instead. When this is wrong we corrupt kernel
memory.
Christian.
>
> - bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
> + bo = kzalloc(bp->bo_ptr_size, GFP_KERNEL);
> if (bo == NULL)
> return -ENOMEM;
> drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, size);
> @@ -642,6 +646,7 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
> AMDGPU_GEM_CREATE_SHADOW;
> bp.type = ttm_bo_type_kernel;
> bp.resv = bo->tbo.base.resv;
> + bp.bo_ptr_size = sizeof(struct amdgpu_bo);
>
> r = amdgpu_bo_do_create(adev, &bp, &bo->shadow);
> if (!r) {
> @@ -676,6 +681,9 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
> int r;
>
> bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW;
> + if (bp->bo_ptr_size < sizeof(struct amdgpu_bo))
> + bp->bo_ptr_size = sizeof(struct amdgpu_bo);
> +
> r = amdgpu_bo_do_create(adev, bp, bo_ptr);
> if (r)
> return r;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index 8cd96c9330dd..848dc0a017dd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -40,6 +40,7 @@
> struct amdgpu_bo_param {
> unsigned long size;
> int byte_align;
> + u32 bo_ptr_size;
> u32 domain;
> u32 preferred_domain;
> u64 flags;
More information about the amd-gfx
mailing list