lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 134/255] can: j1939: transport: j1939_xtp_rx_dat_one(): compare own packets to detect corruptions
    Date
    From: Oleksij Rempel <o.rempel@pengutronix.de>

    [ Upstream commit e052d0540298bfe0f6cbbecdc7e2ea9b859575b2 ]

    Since the stack relays on receiving own packets, it was overwriting own
    transmit buffer from received packets.

    At least theoretically, the received echo buffer can be corrupt or
    changed and the session partner can request to resend previous data. In
    this case we will re-send bad data.

    With this patch we will stop to overwrite own TX buffer and use it for
    sanity checking.

    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://lore.kernel.org/r/20200807105200.26441-6-o.rempel@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/can/j1939/transport.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
    index dbd215cbc53d8..a8dd956b5e8e1 100644
    --- a/net/can/j1939/transport.c
    +++ b/net/can/j1939/transport.c
    @@ -1803,7 +1803,20 @@ static void j1939_xtp_rx_dat_one(struct j1939_session *session,
    }

    tpdat = se_skb->data;
    - memcpy(&tpdat[offset], &dat[1], nbytes);
    + if (!session->transmission) {
    + memcpy(&tpdat[offset], &dat[1], nbytes);
    + } else {
    + int err;
    +
    + err = memcmp(&tpdat[offset], &dat[1], nbytes);
    + if (err)
    + netdev_err_once(priv->ndev,
    + "%s: 0x%p: Data of RX-looped back packet (%*ph) doesn't match TX data (%*ph)!\n",
    + __func__, session,
    + nbytes, &dat[1],
    + nbytes, &tpdat[offset]);
    + }
    +
    if (packet == session->pkt.rx)
    session->pkt.rx++;

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-01 18:05    [W:4.370 / U:1.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site