diff options
| author | Yiming Cao <cyiming@codeaurora.org> | 2018-06-19 19:25:27 +0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-06-25 23:52:38 -0700 |
| commit | cc6897b4ca7f086ef37eba598bed3bf09c0ab170 (patch) | |
| tree | b800f9c29522a19704298a4ca0a6167444d7777b | |
| parent | c7a3fb0e9b4f6fe4139652bf46991dbed67a97bc (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.c | 10 |
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); |
