From 1a50269424c81bb9cbb591d7425bb5882618d7ea Mon Sep 17 00:00:00 2001 From: Aniket Masule Date: Fri, 10 May 2019 11:31:24 +0530 Subject: [PATCH] msm: vidc: Add state check to allow flush command Entry field from clock data structure gets initialized with codec data during state transition from MSM_VIDC_CORE_INIT_DONE to MSM_VIDC_OPEN. When flush is called before this transaction, it calls msm_clock_data_reset where mentioned field is getting accessed, which results in uninitialized data access. Add state check to ensure the command is handled in right sequence. Change-Id: Ic98221cbfe465415d89a0e2891f8af65f584f1dc Signed-off-by: Aniket Masule --- msm/vidc/msm_vidc_clocks.c | 2 +- msm/vidc/msm_vidc_common.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/msm/vidc/msm_vidc_clocks.c b/msm/vidc/msm_vidc_clocks.c index faea7f22f46b..a1905a13246b 100644 --- a/msm/vidc/msm_vidc_clocks.c +++ b/msm/vidc/msm_vidc_clocks.c @@ -1099,7 +1099,7 @@ void msm_clock_data_reset(struct msm_vidc_inst *inst) dprintk(VIDC_DBG, "Init DCVS Load\n"); - if (!inst || !inst->core) { + if (!inst || !inst->core || !inst->clk_data.entry) { dprintk(VIDC_ERR, "%s Invalid args: Inst = %pK\n", __func__, inst); return; diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c index 390f119f9611..24f04f5d0fb4 100644 --- a/msm/vidc/msm_vidc_common.c +++ b/msm/vidc/msm_vidc_common.c @@ -5091,6 +5091,14 @@ int msm_comm_flush(struct msm_vidc_inst *inst, u32 flags) "Invalid params, inst %pK\n", inst); return -EINVAL; } + + if (inst->state < MSM_VIDC_OPEN_DONE) { + dprintk(VIDC_ERR, + "Invalid state to call flush, inst %pK, state %#x\n", + inst, inst->state); + return -EINVAL; + } + core = inst->core; hdev = core->device;