diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch new file mode 100644 index 00000000..841358b0 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch @@ -0,0 +1,61 @@ +From 2a6b2fb169835f1167b46589e28eff764725bd8f Mon Sep 17 00:00:00 2001 +From: Philip Yang <Philip.Yang@amd.com> +Date: Mon, 27 Nov 2017 18:29:44 -0500 +Subject: [PATCH 3402/4131] drm/amdkfd: Add crash protection in debugger + register path + +After debugger is registered, the pqm_destroy_queue fails because is_debug +is true, the queue should not be removed from process_queue_list since +the count is not reduced. + +Test application calls debugger unregister without register debugger, add +null pointer check protection to avoid crash for this case + +Signed-off-by: Philip Yang <Philip.Yang@amd.com> +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> +Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> +Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 +- + drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +index cc61ec2..62c3d9c 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +@@ -526,7 +526,7 @@ static int kfd_ioctl_dbg_unregister(struct file *filep, + long status; + + dev = kfd_device_by_id(args->gpu_id); +- if (!dev) ++ if (!dev || !dev->dbgmgr) + return -EINVAL; + + if (dev->device_info->asic_family == CHIP_CARRIZO) { +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 2447043..10f9a87 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +@@ -312,6 +312,10 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid) + if (pqn->q) { + dqm = pqn->q->device->dqm; + retval = dqm->ops.destroy_queue(dqm, &pdd->qpd, pqn->q); ++ if (retval) { ++ pr_debug("Destroy queue failed, returned %d\n", retval); ++ goto err_destroy_queue; ++ } + uninit_queue(pqn->q); + } + +@@ -323,6 +327,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid) + list_empty(&pdd->qpd.priv_queue_list)) + dqm->ops.unregister_process(dqm, &pdd->qpd); + ++err_destroy_queue: + return retval; + } + +-- +2.7.4 + |