summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhani Kumar Uppalapati <phaniu@codeaurora.org>2016-05-18 18:04:31 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-13 16:17:41 -0700
commit48fb96241b25329ca0d9a70de1bc4e025eeef607 (patch)
treebdf2138791c76464b5b152ba600f85d14d4efa85
parente37344776120edf9e2ffc3328bca5809f0ead873 (diff)
soundwire: Fix NULL pointer dereference
Fix NULL pointer dereference in soundwire master controller driver. CRs-fixed: 1018329 Change-Id: I716401adda144ac0c03520f747694eaa50ea8e51 Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
-rw-r--r--drivers/soundwire/swr-wcd-ctrl.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/soundwire/swr-wcd-ctrl.c b/drivers/soundwire/swr-wcd-ctrl.c
index a8f93beeabbe..2cb60c11e212 100644
--- a/drivers/soundwire/swr-wcd-ctrl.c
+++ b/drivers/soundwire/swr-wcd-ctrl.c
@@ -675,6 +675,11 @@ static void swrm_cleanup_disabled_data_ports(struct swr_master *master,
int port_disable_cnt = 0;
struct swr_mstr_ctrl *swrm = swr_get_ctrl_data(master);
+ if (!swrm) {
+ pr_err("%s: swrm is null\n", __func__);
+ return;
+ }
+
dev_dbg(swrm->dev, "%s: master num_port: %d\n", __func__,
master->num_port);
@@ -740,6 +745,11 @@ static void swrm_slvdev_datapath_control(struct swr_master *master,
SWRM_MCP_FRAME_CTRL_BANK_SSP_PERIOD_BMSK);
u8 inactive_bank;
+ if (!swrm) {
+ pr_err("%s: swrm is null\n", __func__);
+ return;
+ }
+
bank = get_inactive_bank_num(swrm);
dev_dbg(swrm->dev, "%s: enable: %d, cfg_devs: %d\n",
@@ -829,6 +839,11 @@ static void swrm_copy_data_port_config(struct swr_master *master, u8 bank)
int len = 0;
struct swr_mstr_ctrl *swrm = swr_get_ctrl_data(master);
+ if (!swrm) {
+ pr_err("%s: swrm is null\n", __func__);
+ return;
+ }
+
dev_dbg(swrm->dev, "%s: master num_port: %d\n", __func__,
master->num_port);
@@ -975,13 +990,12 @@ port_fail:
mem_fail:
list_for_each_safe(ptr, next, &swrm->mport_list) {
mport = list_entry(ptr, struct swrm_mports, list);
- if (!mport)
- continue;
for (i = 0; i < portinfo->num_port; i++) {
if (portinfo->port_id[i] == mstr_ports[mport->id]) {
port = swrm_get_port(master,
portinfo->port_id[i]);
- port->ch_en = false;
+ if (port)
+ port->ch_en = false;
list_del(&mport->list);
kfree(mport);
break;