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.13 022/113] net: stmmac: fix kernel panic due to NULL pointer dereference of buf->xdp
    Date
    From: Song Yoong Siang <yoong.siang.song@intel.com>

    commit 2b9fff64f03219d78044d1ab40dde8e3d42e968a upstream.

    Ensure a valid XSK buffer before proceed to free the xdp buffer.

    The following kernel panic is observed without this patch:

    RIP: 0010:xp_free+0x5/0x40
    Call Trace:
    stmmac_napi_poll_rxtx+0x332/0xb30 [stmmac]
    ? stmmac_tx_timer+0x3c/0xb0 [stmmac]
    net_rx_action+0x13d/0x3d0
    __do_softirq+0xfc/0x2fb
    ? smpboot_register_percpu_thread+0xe0/0xe0
    run_ksoftirqd+0x32/0x70
    smpboot_thread_fn+0x1d8/0x2c0
    kthread+0x169/0x1a0
    ? kthread_park+0x90/0x90
    ret_from_fork+0x1f/0x30
    ---[ end trace 0000000000000002 ]---

    Fixes: bba2556efad6 ("net: stmmac: Enable RX via AF_XDP zero-copy")
    Cc: <stable@vger.kernel.org> # 5.13.x
    Suggested-by: Ong Boon Leong <boon.leong.ong@intel.com>
    Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    @@ -4925,6 +4925,10 @@ read_again:

    prefetch(np);

    + /* Ensure a valid XSK buffer before proceed */
    + if (!buf->xdp)
    + break;
    +
    if (priv->extend_desc)
    stmmac_rx_extended_status(priv, &priv->dev->stats,
    &priv->xstats,
    @@ -4945,10 +4949,6 @@ read_again:
    continue;
    }

    - /* Ensure a valid XSK buffer before proceed */
    - if (!buf->xdp)
    - break;
    -
    /* XSK pool expects RX frame 1:1 mapped to XSK buffer */
    if (likely(status & rx_not_ls)) {
    xsk_buff_free(buf->xdp);

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