mirror of
https://github.com/torvalds/linux.git
synced 2026-04-30 20:42:33 -04:00
can: bittiming: can_sjw_check(): check that SJW is not longer than either Phase Buffer Segment
According to "The Configuration of the CAN Bit Timing" [1] the SJW "may not be longer than either Phase Buffer Segment". Check SJW against length of both Phase buffers. In case the SJW is greater, report an error via netlink to user space and bail out. [1] http://web.archive.org/http://www.oertel-halle.de/files/cia99paper.pdf Link: https://lore.kernel.org/all/20230202110854.2318594-14-mkl@pengutronix.de Suggested-by: Vincent Mailhol <vincent.mailhol@gmail.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
@@ -24,6 +24,20 @@ int can_sjw_check(const struct net_device *dev, const struct can_bittiming *bt,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (bt->sjw > bt->phase_seg1) {
|
||||
NL_SET_ERR_MSG_FMT(extack,
|
||||
"sjw: %u greater than phase-seg1: %u",
|
||||
bt->sjw, bt->phase_seg1);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (bt->sjw > bt->phase_seg2) {
|
||||
NL_SET_ERR_MSG_FMT(extack,
|
||||
"sjw: %u greater than phase-seg2: %u",
|
||||
bt->sjw, bt->phase_seg2);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user