diff options
| author | Phani Kumar Uppalapati <phaniu@codeaurora.org> | 2016-05-18 18:04:31 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-06-13 16:17:41 -0700 |
| commit | 48fb96241b25329ca0d9a70de1bc4e025eeef607 (patch) | |
| tree | bdf2138791c76464b5b152ba600f85d14d4efa85 | |
| parent | e37344776120edf9e2ffc3328bca5809f0ead873 (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.c | 20 |
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; |
