• Ciara Loftus's avatar
    xsk: Initialise xskb free_list_node · 5bec7ca2
    Ciara Loftus authored
    This commit initialises the xskb's free_list_node when the xskb is
    allocated. This prevents a potential false negative returned from a call
    to list_empty for that node, such as the one introduced in commit
    199d983b ("xsk: Fix crash on double free in buffer pool")
    
    In my environment this issue caused packets to not be received by
    the xdpsock application if the traffic was running prior to application
    launch. This happened when the first batch of packets failed the xskmap
    lookup and XDP_PASS was returned from the bpf program. This action is
    handled in the i40e zc driver (and others) by allocating an skbuff,
    freeing the xdp_buff and adding the associated xskb to the
    xsk_buff_pool's free_list if it hadn't been added already. Without this
    fix, the xskb is not added to the free_list because the check to determine
    if it was added already returns an invalid positive result. Later, this
    caused allocation errors in the driver and the failure to receive packets.
    
    Fixes: 199d983b ("xsk: Fix crash on double free in buffer pool")
    Fixes: 2b43470a ("xsk: Introduce AF_XDP buffer allocation API")
    Signed-off-by: default avatarCiara Loftus <ciara.loftus@intel.com>
    Acked-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
    Link: https://lore.kernel.org/r/20211220155250.2746-1-ciara.loftus@intel.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5bec7ca2
xsk_buff_pool.c 14.5 KB