Commit 31aa5d2a authored by Marc Kleine-Budde's avatar Marc Kleine-Budde Committed by Zheng Zengkai
Browse files

can: isotp: isotp_setsockopt(): only allow to set low level TX flags for CAN-FD

stable inclusion
from stable-5.10.27
commit f88517dae95bc4811739b66ffbc652101e6ba7e7
bugzilla: 51493

--------------------------------

[ Upstream commit e4912459 ]

CAN-FD frames have struct canfd_frame::flags, while classic CAN frames
don't.

This patch refuses to set TX flags (struct
can_isotp_ll_options::tx_flags) on non CAN-FD isotp sockets.

Fixes: e057dd3f ("can: add ISO 15765-2:2016 transport protocol")
Link: https://lore.kernel.org/r/20210218215434.1708249-2-mkl@pengutronix.de


Cc: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
Acked-by: default avatar&nbsp; Weilong Chen <chenweilong@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 58cc112d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1212,7 +1212,8 @@ static int isotp_setsockopt(struct socket *sock, int level, int optname,
			if (ll.mtu != CAN_MTU && ll.mtu != CANFD_MTU)
				return -EINVAL;

			if (ll.mtu == CAN_MTU && ll.tx_dl > CAN_MAX_DLEN)
			if (ll.mtu == CAN_MTU &&
			    (ll.tx_dl > CAN_MAX_DLEN || ll.tx_flags != 0))
				return -EINVAL;

			memcpy(&so->ll, &ll, sizeof(ll));