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

Commit b7a49355 authored by Mohammed Javid's avatar Mohammed Javid
Browse files

msm: ipa: Validate routing rule id



IPA driver expose routing rule id IOCTL's to user space.
There is a chance of getting invalid routing rule-id.
Validate it before committing it to IPA hardware.

Change-Id: If80b94d3a055f9212d25aff9a57d1b45001ba586
Signed-off-by: default avatarMohammed Javid <mjavid@codeaurora.org>
parent ec09d4d9
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -908,6 +908,20 @@ static int __ipa_del_rt_tbl(struct ipa3_rt_tbl *entry)
	return 0;
	return 0;
}
}


static int __ipa_rt_validate_rule_id(u16 rule_id)
{
	if (!rule_id)
		return 0;

	if ((rule_id < ipahal_get_rule_id_hi_bit()) ||
		(rule_id >= ((ipahal_get_rule_id_hi_bit()<<1)-1))) {
		IPAERR_RL("Invalid rule_id provided 0x%x\n",
			rule_id);
		return -EPERM;
	}

	return 0;
}
static int __ipa_rt_validate_hndls(const struct ipa_rt_rule *rule,
static int __ipa_rt_validate_hndls(const struct ipa_rt_rule *rule,
				struct ipa3_hdr_entry **hdr,
				struct ipa3_hdr_entry **hdr,
				struct ipa3_hdr_proc_ctx_entry **proc_ctx)
				struct ipa3_hdr_proc_ctx_entry **proc_ctx)
@@ -1023,6 +1037,8 @@ static int __ipa_add_rt_rule(enum ipa_ip_type ip, const char *name,
	if (__ipa_rt_validate_hndls(rule, &hdr, &proc_ctx))
	if (__ipa_rt_validate_hndls(rule, &hdr, &proc_ctx))
		goto error;
		goto error;


	if (__ipa_rt_validate_rule_id(rule_id))
		goto error;


	tbl = __ipa_add_rt_tbl(ip, name);
	tbl = __ipa_add_rt_tbl(ip, name);
	if (tbl == NULL || (tbl->cookie != IPA_RT_TBL_COOKIE)) {
	if (tbl == NULL || (tbl->cookie != IPA_RT_TBL_COOKIE)) {