Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a79536d authored by Raghavendar rao l's avatar Raghavendar rao l
Browse files

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: default avatarRaghavendar rao l <quic_rlomte@quicinc.com>
parent c36b1855
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -467,14 +467,22 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
	struct qmi_txn txn;
	int ret;

	mutex_lock(&ipa3_qmi_lock);

	if (!client_handle) {

		mutex_unlock(&ipa3_qmi_lock);
		return -EINVAL;
	}

	ret = qmi_txn_init(client_handle, &txn, resp_desc->ei_array, resp);

	if (ret < 0) {
		IPAWANERR("QMI txn init failed, ret= %d\n", ret);
		mutex_unlock(&ipa3_qmi_lock);
		return ret;
	}

	mutex_lock(&ipa3_qmi_lock);
	ret = qmi_send_request(client_handle,
		&ipa3_qmi_ctx->server_sq,
		&txn,
@@ -483,19 +491,16 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
		req_desc->ei_array,
		req);

	if (unlikely(!ipa_q6_clnt)) {
		mutex_unlock(&ipa3_qmi_lock);
		return -EINVAL;
	}

	mutex_unlock(&ipa3_qmi_lock);

	if (ret < 0) {
		qmi_txn_cancel(&txn);
		mutex_unlock(&ipa3_qmi_lock);
		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;
}