• Jesper Dangaard Brouer's avatar
    qdisc: validate frames going through the direct_xmit path · 1f59533f
    Jesper Dangaard Brouer authored
    In commit 50cbe9ab ("net: Validate xmit SKBs right when we
    pull them out of the qdisc") the validation code was moved out of
    dev_hard_start_xmit and into dequeue_skb.
    
    However this overlooked the fact that we do not always enqueue
    the skb onto a qdisc. First situation is if qdisc have flag
    TCQ_F_CAN_BYPASS and qdisc is empty.  Second situation is if
    there is no qdisc on the device, which is a common case for
    software devices.
    
    Originally spotted and inital patch by Alexander Duyck.
    As a result Alex was seeing issues trying to connect to a
    vhost_net interface after commit 50cbe9ab was applied.
    
    Added a call to validate_xmit_skb() in __dev_xmit_skb(), in the
    code path for qdiscs with TCQ_F_CAN_BYPASS flag, and in
    __dev_queue_xmit() when no qdisc.
    
    Also handle the error situation where dev_hard_start_xmit() could
    return a skb list, and does not return dev_xmit_complete(rc) and
    falls through to the kfree_skb(), in that situation it should
    call kfree_skb_list().
    
    Fixes:  50cbe9ab ("net: Validate xmit SKBs right when we pull them out of the qdisc")
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1f59533f
dev.c 179 KB