Skip to content

Commit be193f5

Browse files
committed
netfilter: nf_tables_offload: pass extack to nft_flow_cls_offload_setup()
Otherwise this leads to a stack corruption. Fixes: c5d2752 ("netfilter: nf_tables_offload: add nft_flow_cls_offload_setup()") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
1 parent 8dfd8b0 commit be193f5

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

net/netfilter/nf_tables_offload.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ static void nft_flow_cls_offload_setup(struct flow_cls_offload *cls_flow,
159159
const struct nft_base_chain *basechain,
160160
const struct nft_rule *rule,
161161
const struct nft_flow_rule *flow,
162+
struct netlink_ext_ack *extack,
162163
enum flow_cls_command command)
163164
{
164-
struct netlink_ext_ack extack;
165165
__be16 proto = ETH_P_ALL;
166166

167167
memset(cls_flow, 0, sizeof(*cls_flow));
@@ -170,7 +170,7 @@ static void nft_flow_cls_offload_setup(struct flow_cls_offload *cls_flow,
170170
proto = flow->proto;
171171

172172
nft_flow_offload_common_init(&cls_flow->common, proto,
173-
basechain->ops.priority, &extack);
173+
basechain->ops.priority, extack);
174174
cls_flow->command = command;
175175
cls_flow->cookie = (unsigned long) rule;
176176
if (flow)
@@ -182,14 +182,16 @@ static int nft_flow_offload_rule(struct nft_chain *chain,
182182
struct nft_flow_rule *flow,
183183
enum flow_cls_command command)
184184
{
185+
struct netlink_ext_ack extack = {};
185186
struct flow_cls_offload cls_flow;
186187
struct nft_base_chain *basechain;
187188

188189
if (!nft_is_base_chain(chain))
189190
return -EOPNOTSUPP;
190191

191192
basechain = nft_base_chain(chain);
192-
nft_flow_cls_offload_setup(&cls_flow, basechain, rule, flow, command);
193+
nft_flow_cls_offload_setup(&cls_flow, basechain, rule, flow, &extack,
194+
command);
193195

194196
return nft_setup_cb_call(TC_SETUP_CLSFLOWER, &cls_flow,
195197
&basechain->flow_block.cb_list);
@@ -207,13 +209,15 @@ static int nft_flow_offload_unbind(struct flow_block_offload *bo,
207209
{
208210
struct flow_block_cb *block_cb, *next;
209211
struct flow_cls_offload cls_flow;
212+
struct netlink_ext_ack extack;
210213
struct nft_chain *chain;
211214
struct nft_rule *rule;
212215

213216
chain = &basechain->chain;
214217
list_for_each_entry(rule, &chain->rules, list) {
218+
memset(&extack, 0, sizeof(extack));
215219
nft_flow_cls_offload_setup(&cls_flow, basechain, rule, NULL,
216-
FLOW_CLS_DESTROY);
220+
&extack, FLOW_CLS_DESTROY);
217221
nft_setup_cb_call(TC_SETUP_CLSFLOWER, &cls_flow, &bo->cb_list);
218222
}
219223

0 commit comments

Comments
 (0)