summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiming Cao <cyiming@codeaurora.org>2018-06-19 19:25:27 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-06-25 23:52:38 -0700
commitcc6897b4ca7f086ef37eba598bed3bf09c0ab170 (patch)
treeb800f9c29522a19704298a4ca0a6167444d7777b
parentc7a3fb0e9b4f6fe4139652bf46991dbed67a97bc (diff)
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 <cyiming@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/vidc/msm_vidc_common.c10
1 files 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);