Unverified Commit b4105458 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!1591 net/sched: cls_u32: Fix reference counter leak leading to overflow

parents 87684ac5 dc7eeca1
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -716,12 +716,18 @@ static int u32_set_parms(struct net *net, struct tcf_proto *tp,
			 struct nlattr *est, bool ovr,
			 struct netlink_ext_ack *extack)
{
	int err;
	int err, ifindex = -1;

	err = tcf_exts_validate(net, tp, tb, est, &n->exts, ovr, true, extack);
	if (err < 0)
		return err;

	if (tb[TCA_U32_INDEV]) {
		ifindex = tcf_change_indev(net, tb[TCA_U32_INDEV], extack);
		if (ifindex < 0)
			return -EINVAL;
	}

	if (tb[TCA_U32_LINK]) {
		u32 handle = nla_get_u32(tb[TCA_U32_LINK]);
		struct tc_u_hnode *ht_down = NULL, *ht_old;
@@ -756,13 +762,9 @@ static int u32_set_parms(struct net *net, struct tcf_proto *tp,
		tcf_bind_filter(tp, &n->res, base);
	}

	if (tb[TCA_U32_INDEV]) {
		int ret;
		ret = tcf_change_indev(net, tb[TCA_U32_INDEV], extack);
		if (ret < 0)
			return -EINVAL;
		n->ifindex = ret;
	}
	if (ifindex >= 0)
		n->ifindex = ifindex;

	return 0;
}