drm/amdkfd: Fix potential NULL pointer dereferences
Subsystems (3)
PATCH v2 1/1 drm/amdkfd: Fix potential NULL pointer dereferences
In case kfd_get_process_device_data returns null, there are some null pointer dereferences in functions kfd_bind_processes_to_device and kfd_unbind_processes_from_device.
Fix this by printing a WARN_ON for PDDs that aren't found and skip them with continue statements.
Addresses-Coverity-ID: 1463794 ("Dereference null return value")
Addresses-Coverity-ID: 1463772 ("Dereference null return value")
---
Changes in v2:
Print a WARN_ON and skip PDDs that aren't found instead of returning an error.
drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/amdkfd/kfd_process.c +7 -1
@@ -461,7 +461,8 @@ int kfd_bind_processes_to_device(struct kfd_dev *dev)hash_for_each_rcu (kfd_processes_table, temp, p, kfd_processes) {mutex_lock (&p->mutex); pdd =kfd_get_process_device_data (dev, p); -if (pdd->bound !=PDD_BOUND_SUSPENDED ) { + +if (WARN_ON (!pdd) || pdd->bound !=PDD_BOUND_SUSPENDED ) {mutex_unlock (&p->mutex);continue ; }
@@ -501,6 +502,11 @@ void kfd_unbind_processes_from_device(struct kfd_dev *dev)mutex_lock (&p->mutex); pdd =kfd_get_process_device_data (dev, p); +if (WARN_ON (!pdd)) { +mutex_unlock (&p->mutex); +continue ; + } +if (pdd->bound ==PDD_BOUND ) pdd->bound =PDD_BOUND_SUSPENDED ;mutex_unlock (&p->mutex);
Signature · 1 line
2.7.4
Quoted 46 lines · Gustavo A. R. Silva
In case
kfd_get_process_device_datareturns null, there are some null pointer dereferences in functionskfd_bind_processes_to_deviceandkfd_unbind_processes_from_device.Fix this by printing a
WARN_ONfor PDDs that aren't found and skip them with continue statements.Addresses-Coverity-ID: 1463794 ("Dereference null return value")
Addresses-Coverity-ID: 1463772 ("Dereference null return value")Suggested-by Felix Kuehling <[email protected]>Signed-off-by Gustavo A. R. Silva <[email protected]>---
Changes in v2:
Print aWARN_ONand skip PDDs that aren't found instead of returning an error.drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)drivers/gpu/drm/amd/amdkfd/kfd_process.c +7
-2@@ -461,7 +461,8 @@ int kfd_bind_processes_to_device(struct kfd_dev *dev)hash_for_each_rcu (kfd_processes_table, temp, p, kfd_processes) {mutex_lock (&p->mutex); pdd =kfd_get_process_device_data (dev, p); -if (pdd->bound !=PDD_BOUND_SUSPENDED ) { + +if (WARN_ON (!pdd) || pdd->bound !=PDD_BOUND_SUSPENDED ) {mutex_unlock (&p->mutex);continue ; }@@ -501,6 +502,11 @@ void kfd_unbind_processes_from_device(struct kfd_dev *dev)mutex_lock (&p->mutex); pdd =kfd_get_process_device_data (dev, p); +if (WARN_ON (!pdd)) { +mutex_unlock (&p->mutex); +continue ; + } +if (pdd->bound ==PDD_BOUND ) pdd->bound =PDD_BOUND_SUSPENDED ;mutex_unlock (&p->mutex); --
Quoted 2 lines
2.7.4
This patch is:
Quoting Oded Gabbay <[email protected]>:
Quoted 52 lines
Quoted 46 lines · Gustavo A. R. Silva
In case
kfd_get_process_device_datareturns null, there are some null pointer dereferences in functionskfd_bind_processes_to_deviceandkfd_unbind_processes_from_device.Fix this by printing a
WARN_ONfor PDDs that aren't found and skip them with continue statements.Addresses-Coverity-ID: 1463794 ("Dereference null return value")
Addresses-Coverity-ID: 1463772 ("Dereference null return value")Suggested-by Felix Kuehling <[email protected]>Signed-off-by Gustavo A. R. Silva <[email protected]>---
Changes in v2:
Print aWARN_ONand skip PDDs that aren't found instead of returning an error.drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)drivers/gpu/drm/amd/amdkfd/kfd_process.c +7
-1@@ -461,7 +461,8 @@ int kfd_bind_processes_to_device(struct kfd_dev *dev)hash_for_each_rcu (kfd_processes_table, temp, p, kfd_processes) {mutex_lock (&p->mutex); pdd =kfd_get_process_device_data (dev, p); -if (pdd->bound !=PDD_BOUND_SUSPENDED ) { + +if (WARN_ON (!pdd) || pdd->bound !=PDD_BOUND_SUSPENDED ) {mutex_unlock (&p->mutex);continue ; }@@ -501,6 +502,11 @@ void kfd_unbind_processes_from_device(struct kfd_dev *dev) mutex_lock(&p->mutex); pdd =kfd_get_process_device_data (dev, p); +if (WARN_ON (!pdd)) { +mutex_unlock (&p->mutex); +continue ; + } +if (pdd->bound ==PDD_BOUND ) pdd->bound =PDD_BOUND_SUSPENDED ;mutex_unlock(&p->mutex);Quoted 3 lines
--
2.7.4This patch is:
Quoted 1 line
Reviewed-by Oded Gabbay <[email protected]>
Thank you, Oded.
--
Gustavo