lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 061/800] can: gw: synchronize rcu operations before removing gw job entry
    Date
    From: Oliver Hartkopp <socketcan@hartkopp.net>

    commit fb8696ab14adadb2e3f6c17c18ed26b3ecd96691 upstream.

    can_can_gw_rcv() is called under RCU protection, so after calling
    can_rx_unregister(), we have to call synchronize_rcu in order to wait
    for any RCU read-side critical sections to finish before removing the
    kmem_cache entry with the referenced gw job entry.

    Link: https://lore.kernel.org/r/20210618173645.2238-1-socketcan@hartkopp.net
    Fixes: c1aabdf379bc ("can-gw: add netlink based CAN routing")
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/can/gw.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/net/can/gw.c
    +++ b/net/can/gw.c
    @@ -596,6 +596,7 @@ static int cgw_notifier(struct notifier_
    if (gwj->src.dev == dev || gwj->dst.dev == dev) {
    hlist_del(&gwj->list);
    cgw_unregister_filter(net, gwj);
    + synchronize_rcu();
    kmem_cache_free(cgw_cache, gwj);
    }
    }
    @@ -1154,6 +1155,7 @@ static void cgw_remove_all_jobs(struct n
    hlist_for_each_entry_safe(gwj, nx, &net->can.cgw_list, list) {
    hlist_del(&gwj->list);
    cgw_unregister_filter(net, gwj);
    + synchronize_rcu();
    kmem_cache_free(cgw_cache, gwj);
    }
    }
    @@ -1222,6 +1224,7 @@ static int cgw_remove_job(struct sk_buff

    hlist_del(&gwj->list);
    cgw_unregister_filter(net, gwj);
    + synchronize_rcu();
    kmem_cache_free(cgw_cache, gwj);
    err = 0;
    break;

    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:4.046 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site