• Juergen Gross's avatar
    xen/netback: fix rx queue stall detection · 6032046e
    Juergen Gross authored
    Commit 1d5d4852 ("xen-netback: require fewer guest Rx slots when
    not using GSO") introduced a security problem in netback, as an
    interface would only be regarded to be stalled if no slot is available
    in the rx queue ring page. In case the SKB at the head of the queued
    requests will need more than one rx slot and only one slot is free the
    stall detection logic will never trigger, as the test for that is only
    looking for at least one slot to be free.
    
    Fix that by testing for the needed number of slots instead of only one
    slot being available.
    
    In order to not have to take the rx queue lock that often, store the
    number of needed slots in the queue data. As all SKB dequeue operations
    happen in the rx queue kernel thread this is safe, as long as the
    number of needed slots is accessed via READ/WRITE_ONCE() only and
    updates are always done with the rx queue lock held.
    
    Add a small helper for obtaining the number of free slots.
    
    This is part of XSA-392
    
    Fixes: 1d5d4852 ("xen-netback: require fewer guest Rx slots when not using GSO")
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    Reviewed-by: default avatarJan Beulich <jbeulich@suse.com>
    6032046e
common.h 13.3 KB