From f2afc390ce10f14fd8ac03a74fe87fbbd28e4999 Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Fri, 1 Mar 2019 00:51:56 +0530 Subject: [PATCH] ASoC: bolero: Check for valid handle before pm_runtime_resume Check for valid handle before pm_runtime_resume in bolero register read/write functions to avoid dereference. Change-Id: I34d567e7575202817f4fcda784d0f3df2ed77bde Signed-off-by: Sudheer Papothi --- asoc/codecs/bolero/bolero-cdc.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/asoc/codecs/bolero/bolero-cdc.c b/asoc/codecs/bolero/bolero-cdc.c index f1283f3df204..a21b57beb58d 100644 --- a/asoc/codecs/bolero/bolero-cdc.c +++ b/asoc/codecs/bolero/bolero-cdc.c @@ -103,7 +103,8 @@ static int __bolero_reg_read(struct bolero_priv *priv, goto err; } - pm_runtime_get_sync(priv->macro_params[VA_MACRO].dev); + if (priv->macro_params[VA_MACRO].dev) + pm_runtime_get_sync(priv->macro_params[VA_MACRO].dev); current_mclk_mux_macro = priv->current_mclk_mux_macro[macro_id]; if (!priv->macro_params[current_mclk_mux_macro].mclk_fn) { @@ -125,8 +126,10 @@ static int __bolero_reg_read(struct bolero_priv *priv, priv->macro_params[current_mclk_mux_macro].mclk_fn( priv->macro_params[current_mclk_mux_macro].dev, false); err: - pm_runtime_mark_last_busy(priv->macro_params[VA_MACRO].dev); - pm_runtime_put_autosuspend(priv->macro_params[VA_MACRO].dev); + if (priv->macro_params[VA_MACRO].dev) { + pm_runtime_mark_last_busy(priv->macro_params[VA_MACRO].dev); + pm_runtime_put_autosuspend(priv->macro_params[VA_MACRO].dev); + } mutex_unlock(&priv->clk_lock); return ret; } @@ -143,7 +146,8 @@ static int __bolero_reg_write(struct bolero_priv *priv, "%s: SSR in progress, exit\n", __func__); goto err; } - ret = pm_runtime_get_sync(priv->macro_params[VA_MACRO].dev); + if (priv->macro_params[VA_MACRO].dev) + ret = pm_runtime_get_sync(priv->macro_params[VA_MACRO].dev); current_mclk_mux_macro = priv->current_mclk_mux_macro[macro_id]; if (!priv->macro_params[current_mclk_mux_macro].mclk_fn) { @@ -165,8 +169,10 @@ static int __bolero_reg_write(struct bolero_priv *priv, priv->macro_params[current_mclk_mux_macro].mclk_fn( priv->macro_params[current_mclk_mux_macro].dev, false); err: - pm_runtime_mark_last_busy(priv->macro_params[VA_MACRO].dev); - pm_runtime_put_autosuspend(priv->macro_params[VA_MACRO].dev); + if (priv->macro_params[VA_MACRO].dev) { + pm_runtime_mark_last_busy(priv->macro_params[VA_MACRO].dev); + pm_runtime_put_autosuspend(priv->macro_params[VA_MACRO].dev); + } mutex_unlock(&priv->clk_lock); return ret; }