From cc6897b4ca7f086ef37eba598bed3bf09c0ab170 Mon Sep 17 00:00:00 2001 From: Yiming Cao Date: Tue, 19 Jun 2018 19:25:27 +0800 Subject: [PATCH] msm: vidc: Fix accessing invalid instance The instance got from the list may possibly be closed before printing its info. Change-Id: I7fdad3025cebace951a073cb52153d032533bd73 Signed-off-by: Yiming Cao --- drivers/media/platform/msm/vidc/msm_vidc_common.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c index 3af6e53b21e7..ee3cfb88855c 100644 --- a/drivers/media/platform/msm/vidc/msm_vidc_common.c +++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c @@ -2614,6 +2614,7 @@ int msm_comm_check_core_init(struct msm_vidc_core *core) int rc = 0; struct hfi_device *hdev; struct msm_vidc_inst *inst = NULL; + int dref = 0; mutex_lock(&core->lock); if (core->state >= VIDC_CORE_INIT_DONE) { @@ -2637,11 +2638,16 @@ int msm_comm_check_core_init(struct msm_vidc_core *core) * Just grab one of the inst from instances list and * use it. */ - inst = list_first_entry(&core->instances, + inst = list_first_entry_or_null(&core->instances, struct msm_vidc_inst, list); + if (inst) + dref = kref_get_unless_zero(&inst->kref); mutex_unlock(&core->lock); - msm_comm_print_debug_info(inst); + if (dref) { + msm_comm_print_debug_info(inst); + put_inst(inst); + } mutex_lock(&core->lock); BUG_ON(msm_vidc_debug_timeout);