lkml.org 
[lkml]   [2022]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 1004/1017] xsk: Do not write NULL in SW ring at allocation failure
    Date
    From: Magnus Karlsson <magnus.karlsson@intel.com>

    commit a95a4d9b39b0324402569ed7395aae59b8fd2b11 upstream.

    For the case when xp_alloc_batch() is used but the batched allocation
    cannot be used, there is a slow path that uses the non-batched
    xp_alloc(). When it fails to allocate an entry, it returns NULL. The
    current code wrote this NULL into the entry of the provided results
    array (pointer to the driver SW ring usually) and returned. This might
    not be what the driver expects and to make things simpler, just write
    successfully allocated xdp_buffs into the SW ring,. The driver might
    have information in there that is still important after an allocation
    failure.

    Note that at this point in time, there are no drivers using
    xp_alloc_batch() that could trigger this slow path. But one might get
    added.

    Fixes: 47e4075df300 ("xsk: Batched buffer allocation for the pool")
    Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220328142123.170157-2-maciej.fijalkowski@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/xdp/xsk_buff_pool.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    --- a/net/xdp/xsk_buff_pool.c
    +++ b/net/xdp/xsk_buff_pool.c
    @@ -584,9 +584,13 @@ u32 xp_alloc_batch(struct xsk_buff_pool
    u32 nb_entries1 = 0, nb_entries2;

    if (unlikely(pool->dma_need_sync)) {
    + struct xdp_buff *buff;
    +
    /* Slow path */
    - *xdp = xp_alloc(pool);
    - return !!*xdp;
    + buff = xp_alloc(pool);
    + if (buff)
    + *xdp = buff;
    + return !!buff;
    }

    if (unlikely(pool->free_list_cnt)) {

    \
     
     \ /
      Last update: 2022-04-05 16:09    [W:3.621 / U:1.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site