Thread (13 messages) 13 messages, 2 authors, 2021-10-28

Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address

From: Zhang Changzhong <hidden>
Date: 2021-10-28 07:33:32
Also in: lkml, netdev

On 2021/10/28 14:51, Oleksij Rempel wrote:
Hi,

On Mon, Oct 25, 2021 at 03:30:57PM +0800, Zhang Changzhong wrote:
quoted
On 2021/10/22 18:23, Oleksij Rempel wrote:
quoted
On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
quoted
According to SAE-J1939-82 2015 (A.3.6 Row 2), a receiver should never
send TP.CM_CTS to the global address, so we can add a check in
j1939_can_recv() to drop messages with invalid source address.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong <redacted>
NACK. This will break Address Claiming, where first message is SA == 0xff
I know that 0xfe can be used as a source address, but which message has a source
address of 0xff?

According to SAE-J1939-81 2017 4.2.2.8:

  The network address 255, also known as the Global address, is permitted in the
  Destination Address field of the SAE J1939 message identifier but never in the
  Source Address field.
You are right. Thx!

Are you using any testing frameworks?
Can you please take a look here:
https://github.com/linux-can/can-tests/tree/master/j1939

We are using this scripts for regression testing of some know bugs.
Great! I'll run these scripts before posting patches.
quoted
quoted
quoted
---
 net/can/j1939/main.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c
index 08c8606..4f1e4bb 100644
--- a/net/can/j1939/main.c
+++ b/net/can/j1939/main.c
@@ -75,6 +75,10 @@ static void j1939_can_recv(struct sk_buff *iskb, void *data)
 	skcb->addr.pgn = (cf->can_id >> 8) & J1939_PGN_MAX;
 	/* set default message type */
 	skcb->addr.type = J1939_TP;
+	if (!j1939_address_is_valid(skcb->addr.sa))
+		/* ignore messages whose sa is broadcast address */
+		goto done;
Please add some warning once message here. We wont to know if something bad
is happening on the bus.
Will do. Thanks for your suggestions.

Regards,
Changzhong
quoted
quoted
quoted
+
 	if (j1939_pgn_is_pdu1(skcb->addr.pgn)) {
 		/* Type 1: with destination address */
 		skcb->addr.da = skcb->addr.pgn;
-- 
2.9.5

Regards,
Oleksij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help