can: isotp: tx-path: zero initialize outgoing CAN frames
Subsystems (4)
Oliver Hartkopp
maintainerPATCH v2 1/1 can: isotp: tx-path: zero initialize outgoing CAN frames
Commit d4eb538e1f48 ("can: isotp: TX-path: ensure that CAN frame flags are initialized") ensured the TX flags to be properly set for outgoing CAN frames.
In fact the root cause of the issue results from a missing initialization of outgoing CAN frames created by isotp. This is no problem on the CAN bus as the CAN driver only picks the correctly defined content from the struct can(fd)_frame. But when the outgoing frames are monitored (e.g. with candump) we potentially leak some bytes in the unused content of struct can(fd)_frame.
--- net/can/isotp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
net/can/isotp.c +3 -3
@@ -194,11 +194,11 @@ static int isotp_send_fc(struct sock *sk, int ae, u8 flowstatus)can_skb_prv (nskb)->skbcnt =0 ; nskb->dev = dev;can_skb_set_owner (nskb, sk); ncf = (struct canfd_frame *)nskb->data; -skb_put (nskb, so->ll.mtu); +skb_put_zero (nskb, so->ll.mtu);/* create & send flow control reply */ ncf->can_id = so->txid;if (so->opt.flags &CAN_ISOTP_TX_PADDING ) {
@@ -777,11 +777,11 @@ static enum hrtimer_restart isotp_tx_timer_handler(struct hrtimer *hrtimer)can_skb_reserve (skb);can_skb_prv (skb)->ifindex = dev->ifindex;can_skb_prv (skb)->skbcnt =0 ; cf = (struct canfd_frame *)skb->data; -skb_put (skb, so->ll.mtu); +skb_put_zero (skb, so->ll.mtu);/* create consecutive frame */ isotp_fill_dataframe (cf, so, ae,0 );/* place consecutive frame N_PCI in appropriate index */
@@ -893,11 +893,11 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) so->tx.state =ISOTP_SENDING ; so->tx.len = size; so->tx.idx =0 ; cf = (struct canfd_frame *)skb->data; -skb_put (skb, so->ll.mtu); +skb_put_zero (skb, so->ll.mtu);/* check for single frame transmission depending on TX_DL */ if (size <= so->tx.ll_dl -SF_PCI_SZ4 - ae - off) {/* The message size generally fits into a SingleFrame - good. *
Signature · 1 line
2.30.1
Marc Kleine-Budde
maintainerQuoted 11 lines · Oliver Hartkopp
Commit
d4eb538e1f48("can: isotp: TX-path: ensure that CAN frame flags are initialized") ensured the TX flags to be properly set for outgoing CAN frames.In fact the root cause of the issue results from a missing initialization of outgoing CAN frames created by isotp. This is no problem on the CAN bus as the CAN driver only picks the correctly defined content from the struct can(fd)_frame. But when the outgoing frames are monitored (e.g. with candump) we potentially leak some bytes in the unused content of struct can(fd)_frame.
Quoted 3 lines
Fixes e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol")Cc Marc Kleine-Budde <[email protected]>Signed-off-by Oliver Hartkopp <[email protected]>
Applied to linux-can/testing
thanks,
Marc
Signature · 4 lines
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 |