msm: ipa3: Handle race condition to avoid NULL access
Updated change to avoid race condition and NULL pointer access, In case of SSR and ioctl call while performing QMI transaction. Change-Id: I09dbf33d76a3a0d9e4917e62aaf1257a1abe2db9 Signed-off-by: Raghavendar rao l <quic_rlomte@quicinc.com>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
619508a35f
commit
859d283fd8
@@ -547,16 +547,22 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
|
|||||||
struct qmi_txn txn;
|
struct qmi_txn txn;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!client_handle)
|
mutex_lock(&ipa3_qmi_lock);
|
||||||
|
|
||||||
|
if (!client_handle) {
|
||||||
|
|
||||||
|
mutex_unlock(&ipa3_qmi_lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
ret = qmi_txn_init(client_handle, &txn, resp_desc->ei_array, resp);
|
ret = qmi_txn_init(client_handle, &txn, resp_desc->ei_array, resp);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
IPAWANERR("QMI txn init failed, ret= %d\n", ret);
|
IPAWANERR("QMI txn init failed, ret= %d\n", ret);
|
||||||
|
mutex_unlock(&ipa3_qmi_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&ipa3_qmi_lock);
|
|
||||||
ret = qmi_send_request(client_handle,
|
ret = qmi_send_request(client_handle,
|
||||||
&ipa3_qmi_ctx->server_sq,
|
&ipa3_qmi_ctx->server_sq,
|
||||||
&txn,
|
&txn,
|
||||||
@@ -565,19 +571,16 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
|
|||||||
req_desc->ei_array,
|
req_desc->ei_array,
|
||||||
req);
|
req);
|
||||||
|
|
||||||
if (unlikely(!ipa_q6_clnt)) {
|
|
||||||
mutex_unlock(&ipa3_qmi_lock);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&ipa3_qmi_lock);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
qmi_txn_cancel(&txn);
|
qmi_txn_cancel(&txn);
|
||||||
|
mutex_unlock(&ipa3_qmi_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = qmi_txn_wait(&txn, msecs_to_jiffies(timeout_ms));
|
|
||||||
|
|
||||||
|
ret = qmi_txn_wait(&txn, msecs_to_jiffies(timeout_ms));
|
||||||
|
mutex_unlock(&ipa3_qmi_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user