lkml.org 
[lkml]   [2021]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 048/103] net: stmmac: fix kernel panic due to NULL pointer dereference of plat->est
    Date
    From: Wong Vee Khee <vee.khee.wong@linux.intel.com>

    [ Upstream commit 82a44ae113b7b35850f4542f0443fcab221e376a ]

    In the case of taprio offload is not enabled, the error handling path
    causes a kernel crash due to kernel NULL pointer deference.

    Fix this by adding check for NULL before attempt to access 'plat->est'
    on the mutex_lock() call.

    The following kernel panic is observed without this patch:

    RIP: 0010:mutex_lock+0x10/0x20
    Call Trace:
    tc_setup_taprio+0x482/0x560 [stmmac]
    kmem_cache_alloc_trace+0x13f/0x490
    taprio_disable_offload.isra.0+0x9d/0x180 [sch_taprio]
    taprio_destroy+0x6c/0x100 [sch_taprio]
    qdisc_create+0x2e5/0x4f0
    tc_modify_qdisc+0x126/0x740
    rtnetlink_rcv_msg+0x12b/0x380
    _raw_spin_lock_irqsave+0x19/0x40
    _raw_spin_unlock_irqrestore+0x18/0x30
    create_object+0x212/0x340
    rtnl_calcit.isra.0+0x110/0x110
    netlink_rcv_skb+0x50/0x100
    netlink_unicast+0x191/0x230
    netlink_sendmsg+0x243/0x470
    sock_sendmsg+0x5e/0x60
    ____sys_sendmsg+0x20b/0x280
    copy_msghdr_from_user+0x5c/0x90
    __mod_memcg_state+0x87/0xf0
    ___sys_sendmsg+0x7c/0xc0
    lru_cache_add+0x7f/0xa0
    _raw_spin_unlock+0x16/0x30
    wp_page_copy+0x449/0x890
    handle_mm_fault+0x921/0xfc0
    __sys_sendmsg+0x59/0xa0
    do_syscall_64+0x33/0x40
    entry_SYSCALL_64_after_hwframe+0x44/0xa9
    ---[ end trace b1f19b24368a96aa ]---

    Fixes: b60189e0392f ("net: stmmac: Integrate EST with TAPRIO scheduler API")
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: Wong Vee Khee <vee.khee.wong@linux.intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
    index 8c2eae2a7efd..22c34474e617 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
    @@ -781,11 +781,13 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
    return 0;

    disable:
    - mutex_lock(&priv->plat->est->lock);
    - priv->plat->est->enable = false;
    - stmmac_est_configure(priv, priv->ioaddr, priv->plat->est,
    - priv->plat->clk_ptp_rate);
    - mutex_unlock(&priv->plat->est->lock);
    + if (priv->plat->est) {
    + mutex_lock(&priv->plat->est->lock);
    + priv->plat->est->enable = false;
    + stmmac_est_configure(priv, priv->ioaddr, priv->plat->est,
    + priv->plat->clk_ptp_rate);
    + mutex_unlock(&priv->plat->est->lock);
    + }

    return ret;
    }
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-09-01 14:41    [W:4.191 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site