This patchset fixes 3 standard conformance problems in the j1939 stack.
v2:
- Add netdev_err_once() to indicate bad messages on the bus.
- Fix the if statement in the third patch to avoid breaking ETP
functionality.
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 | 6 ++++++
net/can/j1939/transport.c | 11 +++++++++++
2 files changed, 17 insertions(+)
--
2.9.5
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>
---
net/can/j1939/main.c | 6 ++++++
1 file changed, 6 insertions(+)
@@ -75,6 +75,12 @@ 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)){+netdev_err_once(priv->ndev,"%s: sa is broadcast address, ignoring!\n",+__func__);+gotodone;+}+if(j1939_pgn_is_pdu1(skcb->addr.pgn)){/* Type 1: with destination address */skcb->addr.da=skcb->addr.pgn;
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 <redacted>
---
net/can/j1939/transport.c | 5 +++++
1 file changed, 5 insertions(+)
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 <redacted>
---
net/can/j1939/transport.c | 6 ++++++
1 file changed, 6 insertions(+)
On Thu, Oct 28, 2021 at 10:38:25PM +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 <redacted>
On Thu, Oct 28, 2021 at 10:38:26PM +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 <redacted>
@@ -75,6 +75,12 @@ 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)){+netdev_err_once(priv->ndev,"%s: sa is broadcast address, ignoring!\n",+__func__);+gotodone;+}+if(j1939_pgn_is_pdu1(skcb->addr.pgn)){/* Type 1: with destination address */skcb->addr.da=skcb->addr.pgn;
On Thu, Oct 28, 2021 at 10:38:27PM +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 <redacted>
From: Marc Kleine-Budde <mkl@pengutronix.de> Date: 2021-11-06 16:27:08
On 28.10.2021 22:38:24, Zhang Changzhong wrote:
This patchset fixes 3 standard conformance problems in the j1939 stack.
Applied to linux-can/testing added stable on Cc.
thanks,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |