lkml.org 
[lkml]   [2019]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 38/75] net: stmmac: fix dropping of multi-descriptor RX frames
    Date
    [ Upstream commit 8ac0c24fe1c256af6644caf3d311029440ec2fbd ]

    Packets without the last descriptor set should be dropped early. If we
    receive a frame larger than the DMA buffer, the HW will continue using the
    next descriptor. Driver mistakes these as individual frames, and sometimes
    a truncated frame (without the LD set) may look like a valid packet.

    This fixes a strange issue where the system replies to 4098-byte ping
    although the MTU/DMA buffer size is set to 4096, and yet at the same
    time it's logging an oversized packet.

    Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
    index cdfe9a350ac0..f2150efddc88 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
    @@ -201,6 +201,11 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
    if (unlikely(rdes0 & RDES0_OWN))
    return dma_own;

    + if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
    + stats->rx_length_errors++;
    + return discard_frame;
    + }
    +
    if (unlikely(rdes0 & RDES0_ERROR_SUMMARY)) {
    if (unlikely(rdes0 & RDES0_DESCRIPTOR_ERROR)) {
    x->rx_desc++;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-05-06 16:57    [W:4.018 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site