From 8a81c4a868357d41e56ce7af802180d2135a34bc Mon Sep 17 00:00:00 2001 From: pavanc Date: Wed, 6 Jun 2018 12:13:17 +0530 Subject: [PATCH] dsp: lsm: Initialize lock and condition before apr_register While allocating lsm client, lock and conditions are initialized after registering session with APR. There is a possibility of accessing uninitialized condition from q6lsm_callback when SSR is triggerred after the port specific apr is registered. Initialized lock, condition and state before registering session with APR to avoid invalid access. CRs-Fixed: 2230065 Change-Id: I48b6eb7670863c45b0539155592ea0b0a3c1bffc Signed-off-by: pavanc --- dsp/q6lsm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dsp/q6lsm.c b/dsp/q6lsm.c index 6af7f6953507..73043f52e359 100644 --- a/dsp/q6lsm.c +++ b/dsp/q6lsm.c @@ -311,6 +311,11 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) kfree(client); return NULL; } + + init_waitqueue_head(&client->cmd_wait); + mutex_init(&client->cmd_lock); + atomic_set(&client->cmd_state, CMD_STATE_CLEARED); + pr_debug("%s: Client Session %d\n", __func__, client->session); client->apr = apr_register("ADSP", "LSM", q6lsm_callback, ((client->session) << 8 | client->session), @@ -328,9 +333,6 @@ struct lsm_client *q6lsm_client_alloc(lsm_app_cb cb, void *priv) goto fail; } - init_waitqueue_head(&client->cmd_wait); - mutex_init(&client->cmd_lock); - atomic_set(&client->cmd_state, CMD_STATE_CLEARED); pr_debug("%s: New client allocated\n", __func__); return client; fail: