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 <spapothi@codeaurora.org>
Šī revīzija ir iekļauta:
Sudheer Papothi
2019-03-01 00:51:56 +05:30
vecāks 2b5cb6ac75
revīzija f2afc390ce

Parādīt failu

@@ -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;
}