lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 086/103] llc: avoid blocking in llc_sap_close()
    Date
    From: Cong Wang <xiyou.wangcong@gmail.com>

    [ Upstream commit 9708d2b5b7c648e8e0a40d11e8cea12f6277f33c ]

    llc_sap_close() is called by llc_sap_put() which
    could be called in BH context in llc_rcv(). We can't
    block in BH.

    There is no reason to block it here, kfree_rcu() should
    be sufficient.

    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/net/llc.h | 1 +
    net/llc/llc_core.c | 4 +---
    2 files changed, 2 insertions(+), 3 deletions(-)

    diff --git a/include/net/llc.h b/include/net/llc.h
    index 890a87318014d..df282d9b40170 100644
    --- a/include/net/llc.h
    +++ b/include/net/llc.h
    @@ -66,6 +66,7 @@ struct llc_sap {
    int sk_count;
    struct hlist_nulls_head sk_laddr_hash[LLC_SK_LADDR_HASH_ENTRIES];
    struct hlist_head sk_dev_hash[LLC_SK_DEV_HASH_ENTRIES];
    + struct rcu_head rcu;
    };

    static inline
    diff --git a/net/llc/llc_core.c b/net/llc/llc_core.c
    index 260b3dc1b4a2a..64d4bef04e730 100644
    --- a/net/llc/llc_core.c
    +++ b/net/llc/llc_core.c
    @@ -127,9 +127,7 @@ void llc_sap_close(struct llc_sap *sap)
    list_del_rcu(&sap->node);
    spin_unlock_bh(&llc_sap_list_lock);

    - synchronize_rcu();
    -
    - kfree(sap);
    + kfree_rcu(sap, rcu);
    }

    static struct packet_type llc_packet_type __read_mostly = {
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-08 12:57    [W:4.349 / U:0.996 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site