msm: ipa: add check to see if pm client is not NULL

Add check to see if it is freed in pm deregister context
and trying to read again after free.

Change-Id: I764f012d0c7cd53f126aee221f7c1d6a914b7390
Signed-off-by: Michael Adisumarta <madisuma@codeaurora.org>
tirimbino
Michael Adisumarta 4 years ago committed by Gerrit - the friendly Code Review server
parent 5642aab614
commit 8b52ab8426
  1. 17
      drivers/platform/msm/ipa/ipa_v3/ipa_pm.c

@ -1,4 +1,4 @@
/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@ -1254,14 +1254,15 @@ int ipa_pm_set_throughput(u32 hdl, int throughput)
return -EINVAL;
}
mutex_lock(&ipa_pm_ctx->client_mutex);
if (hdl >= IPA_PM_MAX_CLIENTS || ipa_pm_ctx->clients[hdl] == NULL
|| throughput < 0) {
IPA_PM_ERR("Invalid Params\n");
mutex_unlock(&ipa_pm_ctx->client_mutex);
return -EINVAL;
}
client = ipa_pm_ctx->clients[hdl];
mutex_lock(&ipa_pm_ctx->client_mutex);
if (client->group == IPA_PM_GROUP_DEFAULT)
IPA_PM_DBG_LOW("Old throughput: %d\n", client->throughput);
else
@ -1280,14 +1281,16 @@ int ipa_pm_set_throughput(u32 hdl, int throughput)
client->group, ipa_pm_ctx->group_tput[client->group]);
mutex_unlock(&ipa_pm_ctx->client_mutex);
spin_lock_irqsave(&client->state_lock, flags);
if (IPA_PM_STATE_ACTIVE(client->state) || (client->group !=
if (ipa_pm_ctx->clients[hdl]) {
spin_lock_irqsave(&client->state_lock, flags);
if (IPA_PM_STATE_ACTIVE(client->state) || (client->group !=
IPA_PM_GROUP_DEFAULT)) {
spin_unlock_irqrestore(&client->state_lock, flags);
do_clk_scaling();
return 0;
}
spin_unlock_irqrestore(&client->state_lock, flags);
do_clk_scaling();
return 0;
}
spin_unlock_irqrestore(&client->state_lock, flags);
return 0;
}

Loading…
Cancel
Save