Patch "net/sched: flower: fix error handler on replace" has been added to the 6.3-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/sched: flower: fix error handler on replace

to the 6.3-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-sched-flower-fix-error-handler-on-replace.patch
and it can be found in the queue-6.3 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 8fbdc60090c1056b09292569fb189a7d423a0256
Author: Vlad Buslov <vladbu@xxxxxxxxxx>
Date:   Thu May 4 20:16:16 2023 +0200

    net/sched: flower: fix error handler on replace
    
    [ Upstream commit fd741f0d9f702c193b2b44225c004f8c5d5be163 ]
    
    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: 08a0063df3ae ("net/sched: flower: Move filter handle initialization earlier")
    Signed-off-by: Vlad Buslov <vladbu@xxxxxxxxxx>
    Reviewed-by: Pedro Tammela <pctammela@xxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index d62947eef9727..72edaa6277ce1 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -2339,7 +2339,8 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
 errout_mask:
 	fl_mask_put(head, fnew->mask);
 errout_idr:
-	idr_remove(&head->handle_idr, fnew->handle);
+	if (!fold)
+		idr_remove(&head->handle_idr, fnew->handle);
 	__fl_put(fnew);
 errout_tb:
 	kfree(tb);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux