linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/3] can: j1939: fix some standard conformance problems
@ 2021-10-21 14:04 Zhang Changzhong
  2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-21 14:04 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski
  Cc: Zhang Changzhong, linux-can, netdev, linux-kernel

This patchset fixes 3 standard conformance problems in the j1939 stack.

Zhang Changzhong (3):
  can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM
    transport
  can: j1939: j1939_can_recv(): ignore messages with invalid source
    address
  can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM

 net/can/j1939/main.c      | 4 ++++
 net/can/j1939/transport.c | 5 +++++
 2 files changed, 9 insertions(+)

-- 
2.9.5


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport
  2021-10-21 14:04 [PATCH net 0/3] can: j1939: fix some standard conformance problems Zhang Changzhong
@ 2021-10-21 14:04 ` Zhang Changzhong
  2021-10-22  9:54   ` Oleksij Rempel
  2021-10-22 10:30   ` Oleksij Rempel
  2021-10-21 14:04 ` [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address Zhang Changzhong
  2021-10-21 14:04 ` [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM Zhang Changzhong
  2 siblings, 2 replies; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-21 14:04 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski
  Cc: Zhang Changzhong, linux-can, netdev, linux-kernel

This patch prevents BAM transport from being closed by receiving abort
message, as specified in SAE-J1939-82 2015 (A.3.3 Row 4).

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
---
 net/can/j1939/transport.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index bb5c4b8..2efa606 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -2081,6 +2081,9 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
 		break;
 
 	case J1939_ETP_CMD_ABORT: /* && J1939_TP_CMD_ABORT */
+		if (j1939_cb_is_broadcast(skcb))
+			return;
+
 		if (j1939_tp_im_transmitter(skcb))
 			j1939_xtp_rx_abort(priv, skb, true);
 
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-21 14:04 [PATCH net 0/3] can: j1939: fix some standard conformance problems Zhang Changzhong
  2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
@ 2021-10-21 14:04 ` Zhang Changzhong
  2021-10-22 10:23   ` Oleksij Rempel
  2021-10-21 14:04 ` [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM Zhang Changzhong
  2 siblings, 1 reply; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-21 14:04 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski
  Cc: Zhang Changzhong, linux-can, netdev, linux-kernel

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 <zhangchangzhong@huawei.com>
---
 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;
+
 	if (j1939_pgn_is_pdu1(skcb->addr.pgn)) {
 		/* Type 1: with destination address */
 		skcb->addr.da = skcb->addr.pgn;
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM
  2021-10-21 14:04 [PATCH net 0/3] can: j1939: fix some standard conformance problems Zhang Changzhong
  2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
  2021-10-21 14:04 ` [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address Zhang Changzhong
@ 2021-10-21 14:04 ` Zhang Changzhong
  2021-10-22 10:28   ` Oleksij Rempel
  2 siblings, 1 reply; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-21 14:04 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski
  Cc: Zhang Changzhong, linux-can, netdev, linux-kernel

The TP.CM_BAM message must be sent to the global address [1], so add a
check to drop TP.CM_BAM sent to a non-global address.

Without this patch, the receiver will treat the following packets as
normal RTS/CTS tranport:
18EC0102#20090002FF002301
18EB0102#0100000000000000
18EB0102#020000FFFFFFFFFF

[1] SAE-J1939-82 2015 A.3.3 Row 1.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
---
 net/can/j1939/transport.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index 2efa606..93ec0c3 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -2019,6 +2019,8 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
 		extd = J1939_ETP;
 		fallthrough;
 	case J1939_TP_CMD_BAM:
+		if (!j1939_cb_is_broadcast(skcb))
+			return;
 		fallthrough;
 	case J1939_TP_CMD_RTS:
 		if (skcb->addr.type != extd)
-- 
2.9.5


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport
  2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
@ 2021-10-22  9:54   ` Oleksij Rempel
  2021-10-22 10:30   ` Oleksij Rempel
  1 sibling, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-22  9:54 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, linux-can,
	netdev, linux-kernel

On Thu, Oct 21, 2021 at 10:04:15PM +0800, Zhang Changzhong wrote:
> This patch prevents BAM transport from being closed by receiving abort
> message, as specified in SAE-J1939-82 2015 (A.3.3 Row 4).
> 
> Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
> Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>

Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>

Thank you!

> ---
>  net/can/j1939/transport.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
> index bb5c4b8..2efa606 100644
> --- a/net/can/j1939/transport.c
> +++ b/net/can/j1939/transport.c
> @@ -2081,6 +2081,9 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
>  		break;
>  
>  	case J1939_ETP_CMD_ABORT: /* && J1939_TP_CMD_ABORT */
> +		if (j1939_cb_is_broadcast(skcb))
> +			return;
> +
>  		if (j1939_tp_im_transmitter(skcb))
>  			j1939_xtp_rx_abort(priv, skb, true);
>  
> -- 
> 2.9.5
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-21 14:04 ` [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address Zhang Changzhong
@ 2021-10-22 10:23   ` Oleksij Rempel
  2021-10-25  7:30     ` Zhang Changzhong
  0 siblings, 1 reply; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-22 10:23 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, netdev,
	linux-kernel, linux-can

On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
> 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 <zhangchangzhong@huawei.com>

NACK. This will break Address Claiming, where first message is SA == 0xff

> ---
>  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;
> +
>  	if (j1939_pgn_is_pdu1(skcb->addr.pgn)) {
>  		/* Type 1: with destination address */
>  		skcb->addr.da = skcb->addr.pgn;
> -- 
> 2.9.5
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM
  2021-10-21 14:04 ` [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM Zhang Changzhong
@ 2021-10-22 10:28   ` Oleksij Rempel
  2021-10-25  6:59     ` Zhang Changzhong
  0 siblings, 1 reply; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-22 10:28 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, linux-can,
	netdev, linux-kernel

On Thu, Oct 21, 2021 at 10:04:17PM +0800, Zhang Changzhong wrote:
> The TP.CM_BAM message must be sent to the global address [1], so add a
> check to drop TP.CM_BAM sent to a non-global address.
> 
> Without this patch, the receiver will treat the following packets as
> normal RTS/CTS tranport:
> 18EC0102#20090002FF002301
> 18EB0102#0100000000000000
> 18EB0102#020000FFFFFFFFFF
> 
> [1] SAE-J1939-82 2015 A.3.3 Row 1.
> 
> Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
> Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
> ---
>  net/can/j1939/transport.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
> index 2efa606..93ec0c3 100644
> --- a/net/can/j1939/transport.c
> +++ b/net/can/j1939/transport.c
> @@ -2019,6 +2019,8 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
>  		extd = J1939_ETP;
>  		fallthrough;
>  	case J1939_TP_CMD_BAM:
> +		if (!j1939_cb_is_broadcast(skcb))

Please add here netdev_err_once("with some message"), we need to know if
some MCU makes bad things.

> +			return;
>  		fallthrough;
>  	case J1939_TP_CMD_RTS:
>  		if (skcb->addr.type != extd)
> -- 
> 2.9.5
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport
  2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
  2021-10-22  9:54   ` Oleksij Rempel
@ 2021-10-22 10:30   ` Oleksij Rempel
  1 sibling, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-22 10:30 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, linux-can,
	netdev, linux-kernel

On Thu, Oct 21, 2021 at 10:04:15PM +0800, Zhang Changzhong wrote:
> This patch prevents BAM transport from being closed by receiving abort
> message, as specified in SAE-J1939-82 2015 (A.3.3 Row 4).
> 
> Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
> Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
> ---
>  net/can/j1939/transport.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
> index bb5c4b8..2efa606 100644
> --- a/net/can/j1939/transport.c
> +++ b/net/can/j1939/transport.c
> @@ -2081,6 +2081,9 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
>  		break;
>  
>  	case J1939_ETP_CMD_ABORT: /* && J1939_TP_CMD_ABORT */
> +		if (j1939_cb_is_broadcast(skcb))

Please add here netdev_err_once("Abort to broadcast, ignoring!"), or
something like this.

> +			return;
> +
>  		if (j1939_tp_im_transmitter(skcb))
>  			j1939_xtp_rx_abort(priv, skb, true);
>  
> -- 
> 2.9.5
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM
  2021-10-22 10:28   ` Oleksij Rempel
@ 2021-10-25  6:59     ` Zhang Changzhong
  0 siblings, 0 replies; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-25  6:59 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, linux-can,
	netdev, linux-kernel

On 2021/10/22 18:28, Oleksij Rempel wrote:
> On Thu, Oct 21, 2021 at 10:04:17PM +0800, Zhang Changzhong wrote:
>> The TP.CM_BAM message must be sent to the global address [1], so add a
>> check to drop TP.CM_BAM sent to a non-global address.
>>
>> Without this patch, the receiver will treat the following packets as
>> normal RTS/CTS tranport:
>> 18EC0102#20090002FF002301
>> 18EB0102#0100000000000000
>> 18EB0102#020000FFFFFFFFFF
>>
>> [1] SAE-J1939-82 2015 A.3.3 Row 1.
>>
>> Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
>> Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
>> ---
>>  net/can/j1939/transport.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
>> index 2efa606..93ec0c3 100644
>> --- a/net/can/j1939/transport.c
>> +++ b/net/can/j1939/transport.c
>> @@ -2019,6 +2019,8 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, struct sk_buff *skb)
>>  		extd = J1939_ETP;
>>  		fallthrough;
>>  	case J1939_TP_CMD_BAM:
>> +		if (!j1939_cb_is_broadcast(skcb))
> 
> Please add here netdev_err_once("with some message"), we need to know if
> some MCU makes bad things.

Ok, will do.

The current patch breaks ETP functionality as the J1939_ETP_CMD_RTS fallthrough
to J1939_TP_CMD_BAM, this will also be fixed in v2.

> 
>> +			return;
>>  		fallthrough;
>>  	case J1939_TP_CMD_RTS:
>>  		if (skcb->addr.type != extd)
>> -- 
>> 2.9.5
>>
>>
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-22 10:23   ` Oleksij Rempel
@ 2021-10-25  7:30     ` Zhang Changzhong
  2021-10-28  6:51       ` Oleksij Rempel
  0 siblings, 1 reply; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-25  7:30 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, David S. Miller, Jakub Kicinski, netdev,
	linux-kernel, linux-can

On 2021/10/22 18:23, Oleksij Rempel wrote:
> On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
>> 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 <zhangchangzhong@huawei.com>
> 
> 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.

> 
>> ---
>>  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;
>> +
>>  	if (j1939_pgn_is_pdu1(skcb->addr.pgn)) {
>>  		/* Type 1: with destination address */
>>  		skcb->addr.da = skcb->addr.pgn;
>> -- 
>> 2.9.5
>>
>>
>>
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-25  7:30     ` Zhang Changzhong
@ 2021-10-28  6:51       ` Oleksij Rempel
  2021-10-28  7:33         ` Zhang Changzhong
  0 siblings, 1 reply; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-28  6:51 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, linux-kernel, Oleksij Rempel, netdev,
	Marc Kleine-Budde, kernel, Oliver Hartkopp, Jakub Kicinski,
	linux-can, David S. Miller

Hi,

On Mon, Oct 25, 2021 at 03:30:57PM +0800, Zhang Changzhong wrote:
> On 2021/10/22 18:23, Oleksij Rempel wrote:
> > On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
> >> 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 <zhangchangzhong@huawei.com>
> > 
> > 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.

> 
> > 
> >> ---
> >>  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.

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

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-28  6:51       ` Oleksij Rempel
@ 2021-10-28  7:33         ` Zhang Changzhong
  2021-10-28  8:30           ` Oleksij Rempel
  0 siblings, 1 reply; 13+ messages in thread
From: Zhang Changzhong @ 2021-10-28  7:33 UTC (permalink / raw)
  To: Oleksij Rempel
  Cc: Robin van der Gracht, linux-kernel, Oleksij Rempel, netdev,
	Marc Kleine-Budde, kernel, Oliver Hartkopp, Jakub Kicinski,
	linux-can, David S. Miller

On 2021/10/28 14:51, Oleksij Rempel wrote:
> Hi,
> 
> On Mon, Oct 25, 2021 at 03:30:57PM +0800, Zhang Changzhong wrote:
>> On 2021/10/22 18:23, Oleksij Rempel wrote:
>>> On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
>>>> 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 <zhangchangzhong@huawei.com>
>>>
>>> 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.

> 
>>
>>>
>>>> ---
>>>>  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

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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address
  2021-10-28  7:33         ` Zhang Changzhong
@ 2021-10-28  8:30           ` Oleksij Rempel
  0 siblings, 0 replies; 13+ messages in thread
From: Oleksij Rempel @ 2021-10-28  8:30 UTC (permalink / raw)
  To: Zhang Changzhong
  Cc: Robin van der Gracht, linux-kernel, Oleksij Rempel, netdev,
	Marc Kleine-Budde, kernel, Oliver Hartkopp, Jakub Kicinski,
	linux-can, David S. Miller

On Thu, Oct 28, 2021 at 03:33:21PM +0800, Zhang Changzhong wrote:
> On 2021/10/28 14:51, Oleksij Rempel wrote:
> > Hi,
> > 
> > On Mon, Oct 25, 2021 at 03:30:57PM +0800, Zhang Changzhong wrote:
> >> On 2021/10/22 18:23, Oleksij Rempel wrote:
> >>> On Thu, Oct 21, 2021 at 10:04:16PM +0800, Zhang Changzhong wrote:
> >>>> 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 <zhangchangzhong@huawei.com>
> >>>
> >>> 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.
 
You are welcome to extend this tests :)

Regards,
Oleksij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-10-28  8:31 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-21 14:04 [PATCH net 0/3] can: j1939: fix some standard conformance problems Zhang Changzhong
2021-10-21 14:04 ` [PATCH net 1/3] can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport Zhang Changzhong
2021-10-22  9:54   ` Oleksij Rempel
2021-10-22 10:30   ` Oleksij Rempel
2021-10-21 14:04 ` [PATCH net 2/3] can: j1939: j1939_can_recv(): ignore messages with invalid source address Zhang Changzhong
2021-10-22 10:23   ` Oleksij Rempel
2021-10-25  7:30     ` Zhang Changzhong
2021-10-28  6:51       ` Oleksij Rempel
2021-10-28  7:33         ` Zhang Changzhong
2021-10-28  8:30           ` Oleksij Rempel
2021-10-21 14:04 ` [PATCH net 3/3] can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM Zhang Changzhong
2021-10-22 10:28   ` Oleksij Rempel
2021-10-25  6:59     ` Zhang Changzhong

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).