Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Oleksij Rempel <o.rempel@pengutronix.de>,
	Marc Kleine-Budde <mkl@pengutronix.de>,
	Sasha Levin <sashal@kernel.org>,
	linux-can@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH AUTOSEL 5.7 26/54] can: j1939: transport: j1939_xtp_rx_dat_one(): compare own packets to detect corruptions
Date: Mon, 24 Aug 2020 12:36:05 -0400	[thread overview]
Message-ID: <20200824163634.606093-26-sashal@kernel.org> (raw)
In-Reply-To: <20200824163634.606093-1-sashal@kernel.org>

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 9f99af5b0b11e..3e9c377b0dcce 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1769,7 +1769,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


  parent reply	other threads:[~2020-08-24 17:12 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20200824163634.606093-1-sashal@kernel.org>
2020-08-24 16:35 ` [PATCH AUTOSEL 5.7 20/54] selftests/bpf: Fix segmentation fault in test_progs Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 21/54] libbpf: Handle GCC built-in types for Arm NEON Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 22/54] netfilter: avoid ipv6 -> nf_defrag_ipv6 module dependency Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 23/54] libbpf: Prevent overriding errno when logging errors Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 24/54] selftests/bpf: Fix btf_dump test cases on 32-bit arches Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 25/54] selftests/bpf: Correct various core_reloc 64-bit assumptions Sasha Levin
2020-08-24 16:36 ` Sasha Levin [this message]
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 27/54] drivers/net/wan/hdlc_x25: Added needed_headroom and a skb->len check Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 32/54] selftests: disable rp_filter for icmp_redirect.sh Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 33/54] scsi: fcoe: Fix I/O path allocation Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 44/54] macvlan: validate setting of multiple remote source MAC addresses Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 45/54] net: gianfar: Add of_node_put() before goto statement Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 51/54] libbpf: Fix map index used in error message Sasha Levin
2020-08-24 16:36 ` [PATCH AUTOSEL 5.7 52/54] bpf: selftests: global_funcs: Check err_str before strstr Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200824163634.606093-26-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=stable@vger.kernel.org \
    --subject='Re: [PATCH AUTOSEL 5.7 26/54] can: j1939: transport: j1939_xtp_rx_dat_one(): compare own packets to detect corruptions' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).