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

Commit b662f4b6 authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: ipa: fix memory leak on QMI



Fix a memory leak in case tethering stats
QMI message failed.

Change-Id: I90457b5dec2e8f2105f37978de57954cdaf9aa08
CRs-Fixed: 1055880
Acked-by: default avatarAdy Abraham <adya@qti.qualcomm.com>
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent 995bb603
Loading
Loading
Loading
Loading
+26 −22
Original line number Diff line number Diff line
@@ -2344,12 +2344,15 @@ static void rmnet_ipa_get_stats_and_update(bool reset)
	}

	rc = ipa_qmi_get_data_stats(&req, resp);
	if (rc) {
		IPAWANERR("ipa_qmi_get_data_stats failed: %d\n", rc);
		kfree(resp);
		return;
	}

	if (!rc) {
	memset(&msg_meta, 0, sizeof(struct ipa_msg_meta));
	msg_meta.msg_type = IPA_TETHERING_STATS_UPDATE_STATS;
		msg_meta.msg_len =
			sizeof(struct ipa_get_data_stats_resp_msg_v01);
	msg_meta.msg_len = sizeof(struct ipa_get_data_stats_resp_msg_v01);
	rc = ipa2_send_msg(&msg_meta, resp, rmnet_ipa_free_msg);
	if (rc) {
		IPAWANERR("ipa2_send_msg failed: %d\n", rc);
@@ -2357,7 +2360,6 @@ static void rmnet_ipa_get_stats_and_update(bool reset)
		return;
	}
}
}

/**
 * tethering_stats_poll_queue() - Stats polling function
@@ -2404,12 +2406,15 @@ static void rmnet_ipa_get_network_stats_and_update(void)
	req.mux_id_list[0] = ipa_rmnet_ctx.metered_mux_id;

	rc = ipa_qmi_get_network_stats(&req, resp);
	if (rc) {
		IPAWANERR("ipa_qmi_get_network_stats failed %d\n", rc);
		kfree(resp);
		return;
	}

	if (!rc) {
	memset(&msg_meta, 0, sizeof(struct ipa_msg_meta));
	msg_meta.msg_type = IPA_TETHERING_STATS_UPDATE_NETWORK_STATS;
		msg_meta.msg_len =
			sizeof(struct ipa_get_apn_data_stats_resp_msg_v01);
	msg_meta.msg_len = sizeof(struct ipa_get_apn_data_stats_resp_msg_v01);
	rc = ipa2_send_msg(&msg_meta, resp, rmnet_ipa_free_msg);
	if (rc) {
		IPAWANERR("ipa2_send_msg failed: %d\n", rc);
@@ -2417,7 +2422,6 @@ static void rmnet_ipa_get_network_stats_and_update(void)
		return;
	}
}
}

/**
 * rmnet_ipa_poll_tethering_stats() - Tethering stats polling IOCTL handler
+26 −22
Original line number Diff line number Diff line
@@ -2436,12 +2436,15 @@ static void rmnet_ipa_get_stats_and_update(void)
	req.ipa_stats_type = QMI_IPA_STATS_TYPE_PIPE_V01;

	rc = ipa3_qmi_get_data_stats(&req, resp);
	if (rc) {
		IPAWANERR("ipa3_qmi_get_data_stats failed: %d\n", rc);
		kfree(resp);
		return;
	}

	if (!rc) {
	memset(&msg_meta, 0, sizeof(struct ipa_msg_meta));
	msg_meta.msg_type = IPA_TETHERING_STATS_UPDATE_STATS;
		msg_meta.msg_len =
			sizeof(struct ipa_get_data_stats_resp_msg_v01);
	msg_meta.msg_len = sizeof(struct ipa_get_data_stats_resp_msg_v01);
	rc = ipa_send_msg(&msg_meta, resp, rmnet_ipa_free_msg);
	if (rc) {
		IPAWANERR("ipa_send_msg failed: %d\n", rc);
@@ -2449,7 +2452,6 @@ static void rmnet_ipa_get_stats_and_update(void)
		return;
	}
}
}

/**
 * tethering_stats_poll_queue() - Stats polling function
@@ -2496,12 +2498,15 @@ static void rmnet_ipa_get_network_stats_and_update(void)
	req.mux_id_list[0] = ipa3_rmnet_ctx.metered_mux_id;

	rc = ipa3_qmi_get_network_stats(&req, resp);
	if (rc) {
		IPAWANERR("ipa3_qmi_get_network_stats failed: %d\n", rc);
		kfree(resp);
		return;
	}

	if (!rc) {
	memset(&msg_meta, 0, sizeof(struct ipa_msg_meta));
	msg_meta.msg_type = IPA_TETHERING_STATS_UPDATE_NETWORK_STATS;
		msg_meta.msg_len =
			sizeof(struct ipa_get_apn_data_stats_resp_msg_v01);
	msg_meta.msg_len = sizeof(struct ipa_get_apn_data_stats_resp_msg_v01);
	rc = ipa_send_msg(&msg_meta, resp, rmnet_ipa_free_msg);
	if (rc) {
		IPAWANERR("ipa_send_msg failed: %d\n", rc);
@@ -2509,7 +2514,6 @@ static void rmnet_ipa_get_network_stats_and_update(void)
		return;
	}
}
}

/**
 * rmnet_ipa3_poll_tethering_stats() - Tethering stats polling IOCTL handler