Skip to content

Commit fd741f0

Browse files
w1ldptrdavem330
authored andcommitted
net/sched: flower: fix error handler on replace
When replacing a filter (i.e. 'fold' pointer is not NULL) the insertion of new filter to idr is postponed until later in code since handle is already provided by the user. However, the error handling code in fl_change() always assumes that the new filter had been inserted into idr. If error handler is reached when replacing existing filter it may remove it from idr therefore making it unreachable for delete or dump afterwards. Fix the issue by verifying that 'fold' argument wasn't provided by caller before calling idr_remove(). Fixes: 08a0063 ("net/sched: flower: Move filter handle initialization earlier") Signed-off-by: Vlad Buslov <[email protected]> Reviewed-by: Pedro Tammela <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5110f3f commit fd741f0

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

net/sched/cls_flower.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2339,7 +2339,8 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
23392339
errout_mask:
23402340
fl_mask_put(head, fnew->mask);
23412341
errout_idr:
2342-
idr_remove(&head->handle_idr, fnew->handle);
2342+
if (!fold)
2343+
idr_remove(&head->handle_idr, fnew->handle);
23432344
__fl_put(fnew);
23442345
errout_tb:
23452346
kfree(tb);

0 commit comments

Comments
 (0)