mirror of
https://github.com/torvalds/linux.git
synced 2026-04-28 11:32:28 -04:00
can: dev: register_candev(): ensure that bittiming const are valid
Implement the function can_bittiming_const_valid() to check the validity of the specified bit timing constant. Call this function from register_candev() to check the bit timing constants during the registration of the CAN interface. Link: https://lore.kernel.org/all/20230202110854.2318594-6-mkl@pengutronix.de Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
@@ -498,6 +498,18 @@ static int can_get_termination(struct net_device *ndev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool
|
||||
can_bittiming_const_valid(const struct can_bittiming_const *btc)
|
||||
{
|
||||
if (!btc)
|
||||
return true;
|
||||
|
||||
if (!btc->sjw_max)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Register the CAN network device */
|
||||
int register_candev(struct net_device *dev)
|
||||
{
|
||||
@@ -518,6 +530,10 @@ int register_candev(struct net_device *dev)
|
||||
if (!priv->data_bitrate_const != !priv->data_bitrate_const_cnt)
|
||||
return -EINVAL;
|
||||
|
||||
if (!can_bittiming_const_valid(priv->bittiming_const) ||
|
||||
!can_bittiming_const_valid(priv->data_bittiming_const))
|
||||
return -EINVAL;
|
||||
|
||||
if (!priv->termination_const) {
|
||||
err = can_get_termination(dev);
|
||||
if (err)
|
||||
|
||||
Reference in New Issue
Block a user