All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdkfd: Dereference null return value
@ 2024-11-28 16:26 Andrew Martin
  2024-11-28 16:55 ` Felix Kuehling
  0 siblings, 1 reply; 2+ messages in thread
From: Andrew Martin @ 2024-11-28 16:26 UTC (permalink / raw)
  To: amd-gfx; +Cc: felix.kuehling, andrew.martin, Andrew Martin

In the function pqm_uninit there is a call-assignment of "pdd =
kfd_get_process_device_data" which could be null, and this value was
later dereferenced without checking.

Signed-off-by: Andrew Martin <Andrew.Martin@amd.com>
---
 .../drm/amd/amdkfd/kfd_process_queue_manager.c   | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
index c76db22a1000..808c447879c0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
@@ -212,13 +212,21 @@ static void pqm_clean_queue_resource(struct process_queue_manager *pqm,
 void pqm_uninit(struct process_queue_manager *pqm)
 {
 	struct process_queue_node *pqn, *next;
-	struct kfd_process_device *pdd;
 
 	list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {
 		if (pqn->q) {
-			pdd = kfd_get_process_device_data(pqn->q->device, pqm->process);
-			kfd_queue_unref_bo_vas(pdd, &pqn->q->properties);
-			kfd_queue_release_buffers(pdd, &pqn->q->properties);
+			struct kfd_process_device *pdd =
+				kfd_get_process_device_data(
+					pqn->q->device,
+					pqm->process);
+			if (pdd) {
+				kfd_queue_unref_bo_vas(
+					pdd,
+					&pqn->q->properties);
+				kfd_queue_release_buffers(
+					pdd,
+					&pqn->q->properties);
+			}
 			pqm_clean_queue_resource(pqm, pqn);
 		}
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] drm/amdkfd: Dereference null return value
  2024-11-28 16:26 [PATCH] drm/amdkfd: Dereference null return value Andrew Martin
@ 2024-11-28 16:55 ` Felix Kuehling
  0 siblings, 0 replies; 2+ messages in thread
From: Felix Kuehling @ 2024-11-28 16:55 UTC (permalink / raw)
  To: Andrew Martin, amd-gfx


On 2024-11-28 11:26, Andrew Martin wrote:
> In the function pqm_uninit there is a call-assignment of "pdd =
> kfd_get_process_device_data" which could be null, and this value was
> later dereferenced without checking.
> 
> Signed-off-by: Andrew Martin <Andrew.Martin@amd.com>

This seems to fix a bug introduced by a previous patch. Please add a Fixes tag for that:

Fixes: fb91065851cd ("drm/amdkfd: Refactor queue wptr_bo GART mapping")

> ---
>  .../drm/amd/amdkfd/kfd_process_queue_manager.c   | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> index c76db22a1000..808c447879c0 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
> @@ -212,13 +212,21 @@ static void pqm_clean_queue_resource(struct process_queue_manager *pqm,
>  void pqm_uninit(struct process_queue_manager *pqm)
>  {
>  	struct process_queue_node *pqn, *next;
> -	struct kfd_process_device *pdd;
>  
>  	list_for_each_entry_safe(pqn, next, &pqm->queues, process_queue_list) {
>  		if (pqn->q) {
> -			pdd = kfd_get_process_device_data(pqn->q->device, pqm->process);
> -			kfd_queue_unref_bo_vas(pdd, &pqn->q->properties);
> -			kfd_queue_release_buffers(pdd, &pqn->q->properties);
> +			struct kfd_process_device *pdd =
> +				kfd_get_process_device_data(
> +					pqn->q->device,
> +					pqm->process);
> +			if (pdd) {

checkpatch.pl will complain without an empty line after the variable declaration.

> +				kfd_queue_unref_bo_vas(
> +					pdd,
> +					&pqn->q->properties);
> +				kfd_queue_release_buffers(
> +					pdd,
> +					&pqn->q->properties);
> +			}

I think it should be impossible for pdd to be NULL here. Without a PDD, the queue could not have been created in the first place. If we want to add a NULL check here, we should make that a WARN or WARN_ON because it would indicate some serious bug somewhere. The result would be a memory leak here, so we need to warn about that.

Regards,
  Felix

>  			pqm_clean_queue_resource(pqm, pqn);
>  		}
>  


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-11-28 16:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-28 16:26 [PATCH] drm/amdkfd: Dereference null return value Andrew Martin
2024-11-28 16:55 ` Felix Kuehling

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.