summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSujeev Dias <sdias@codeaurora.org>2016-05-01 14:45:56 -0700
committerSujeev Dias <sdias@codeaurora.org>2017-02-21 16:23:58 -0800
commit667012017d56d7edea10d33b68d95f7f5876e788 (patch)
treef4b90d6efab96af358d38d8140cfa8c380c8154a
parentfc63288a51cdf39b1bf147bdf26f5311518a77d2 (diff)
msm: mhi: fix error handling
Validate the channel prior to proceeding further. Unlock spin lock before jumping to error handler. CRs-Fixed: 1016969 Change-Id: Ie3328f878b582a333ae15f3b950c258ec42fd768 Signed-off-by: Sujeev Dias <sdias@codeaurora.org>
-rw-r--r--drivers/net/ethernet/msm/msm_rmnet_mhi.c4
-rw-r--r--drivers/platform/msm/mhi/mhi_main.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/msm/msm_rmnet_mhi.c b/drivers/net/ethernet/msm/msm_rmnet_mhi.c
index a55a26be4273..50d8e72a96c8 100644
--- a/drivers/net/ethernet/msm/msm_rmnet_mhi.c
+++ b/drivers/net/ethernet/msm/msm_rmnet_mhi.c
@@ -625,6 +625,9 @@ static int rmnet_mhi_xmit(struct sk_buff *skb, struct net_device *dev)
tx_ring_full_count[rmnet_mhi_ptr->dev_index]++;
netif_stop_queue(dev);
rmnet_log(MSG_VERBOSE, "Stopping Queue\n");
+ write_unlock_irqrestore(
+ &rmnet_mhi_ptr->out_chan_full_lock,
+ flags);
goto rmnet_mhi_xmit_error_cleanup;
} else {
retry = 1;
@@ -652,7 +655,6 @@ static int rmnet_mhi_xmit(struct sk_buff *skb, struct net_device *dev)
rmnet_mhi_xmit_error_cleanup:
rmnet_log(MSG_VERBOSE, "Ring full\n");
- write_unlock_irqrestore(&rmnet_mhi_ptr->out_chan_full_lock, flags);
return NETDEV_TX_BUSY;
}
diff --git a/drivers/platform/msm/mhi/mhi_main.c b/drivers/platform/msm/mhi/mhi_main.c
index a8da2f9ef9fb..a1d6dfd4be4d 100644
--- a/drivers/platform/msm/mhi/mhi_main.c
+++ b/drivers/platform/msm/mhi/mhi_main.c
@@ -1397,8 +1397,10 @@ static int start_chan_cmd(struct mhi_device_ctxt *mhi_dev_ctxt,
u32 chan;
MHI_TRB_GET_INFO(CMD_TRB_CHID, cmd_pkt, chan);
- if (!VALID_CHAN_NR(chan))
+ if (!VALID_CHAN_NR(chan)) {
mhi_log(MHI_MSG_ERROR, "Bad chan: 0x%x\n", chan);
+ return -EINVAL;
+ }
mhi_dev_ctxt->mhi_chan_pend_cmd_ack[chan] =
MHI_CMD_NOT_PENDING;
mhi_log(MHI_MSG_INFO, "Processed START CMD chan %d\n", chan);