Commit fbc634d3 authored by Zhengchao Shao's avatar Zhengchao Shao
Browse files

net/sched: flower: Fix kabi change

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9DNKF


CVE: CVE-2024-26669

--------------------------------

Fix kabi change.

Fixes: 32f2a0afa95f ("net/sched: flower: Fix chain template offload")
Signed-off-by: default avatarZhengchao Shao <shaozhengchao@huawei.com>
parent 865bd98e
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -369,10 +369,7 @@ struct tcf_proto_ops {
						struct nlattr **tca,
						struct netlink_ext_ack *extack);
	void			(*tmplt_destroy)(void *tmplt_priv);
	void			(*tmplt_reoffload)(struct tcf_chain *chain,
						   bool add,
						   flow_setup_cb_t *cb,
						   void *cb_priv);

	/* rtnetlink specific */
	int			(*dump)(struct net*, struct tcf_proto*, void *,
					struct sk_buff *skb, struct tcmsg*,
+19 −6
Original line number Diff line number Diff line
@@ -1397,6 +1397,19 @@ void tcf_block_put(struct tcf_block *block)

EXPORT_SYMBOL(tcf_block_put);

void (* const tmplt_reoffload)(struct tcf_chain *chain, bool add,
			       flow_setup_cb_t *cb, void *cb_priv);
EXPORT_SYMBOL(tmplt_reoffload);

static void cls_tmplt_reoffload(struct tcf_chain *chain, bool add,
				flow_setup_cb_t *cb, void *cb_priv)
{
	if (!tmplt_reoffload)
		return;

	tmplt_reoffload(chain, add, cb, cb_priv);
}

static int
tcf_block_playback_offloads(struct tcf_block *block, flow_setup_cb_t *cb,
			    void *cb_priv, bool add, bool offload_in_use,
@@ -1414,8 +1427,9 @@ tcf_block_playback_offloads(struct tcf_block *block, flow_setup_cb_t *cb,
		     chain = __tcf_get_next_chain(block, chain),
		     tcf_chain_put(chain_prev)) {
		if (chain->tmplt_ops && add)
			chain->tmplt_ops->tmplt_reoffload(chain, true, cb,
							  cb_priv);
			if (!strcmp(chain->tmplt_ops->kind, "flower"))
				cls_tmplt_reoffload(chain, true, cb, cb_priv);

		for (tp = __tcf_get_next_proto(chain, NULL); tp;
		     tp_prev = tp,
			     tp = __tcf_get_next_proto(chain, tp),
@@ -1432,8 +1446,8 @@ tcf_block_playback_offloads(struct tcf_block *block, flow_setup_cb_t *cb,
			}
		}
		if (chain->tmplt_ops && !add)
			chain->tmplt_ops->tmplt_reoffload(chain, false, cb,
							  cb_priv);
			if (!strcmp(chain->tmplt_ops->kind, "flower"))
				cls_tmplt_reoffload(chain, false, cb, cb_priv);
	}

	return 0;
@@ -2778,8 +2792,7 @@ static int tc_chain_tmplt_add(struct tcf_chain *chain, struct net *net,
	ops = tcf_proto_lookup_ops(name, true, extack);
	if (IS_ERR(ops))
		return PTR_ERR(ops);
	if (!ops->tmplt_create || !ops->tmplt_destroy || !ops->tmplt_dump ||
	    !ops->tmplt_reoffload) {
	if (!ops->tmplt_create || !ops->tmplt_destroy || !ops->tmplt_dump) {
		NL_SET_ERR_MSG(extack, "Chain templates are not supported with specified classifier");
		module_put(ops->owner);
		return -EOPNOTSUPP;
+10 −1
Original line number Diff line number Diff line
@@ -336,6 +336,12 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,
	return -1;
}

extern void (*tmplt_reoffload)(struct tcf_chain *chain, bool add,
			       flow_setup_cb_t *cb, void *cb_priv);

static void fl_tmplt_reoffload(struct tcf_chain *chain, bool add,
			       flow_setup_cb_t *cb, void *cb_priv);

static int fl_init(struct tcf_proto *tp)
{
	struct cls_fl_head *head;
@@ -350,6 +356,8 @@ static int fl_init(struct tcf_proto *tp)
	rcu_assign_pointer(tp->root, head);
	idr_init(&head->handle_idr);

	tmplt_reoffload = &fl_tmplt_reoffload;

	return rhashtable_init(&head->ht, &mask_ht_params);
}

@@ -588,6 +596,8 @@ static void fl_destroy(struct tcf_proto *tp, bool rtnl_held,

	__module_get(THIS_MODULE);
	tcf_queue_work(&head->rwork, fl_destroy_sleepable);

	tmplt_reoffload = NULL;
}

static void fl_put(struct tcf_proto *tp, void *arg)
@@ -3233,7 +3243,6 @@ static struct tcf_proto_ops cls_fl_ops __read_mostly = {
	.bind_class	= fl_bind_class,
	.tmplt_create	= fl_tmplt_create,
	.tmplt_destroy	= fl_tmplt_destroy,
	.tmplt_reoffload = fl_tmplt_reoffload,
	.tmplt_dump	= fl_tmplt_dump,
	.owner		= THIS_MODULE,
	.flags		= TCF_PROTO_OPS_DOIT_UNLOCKED,