aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/can
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2017-05-18 10:22:22 +0200
committerMarc Kleine-Budde <mkl@pengutronix.de>2017-06-09 11:39:23 +0200
commitff3416fb5b02cfae94591ef4395b0b4dc793f25e (patch)
treef90733085bb44784ab6d8175cd3830aad4e5d93c /drivers/net/can
parentnet: vrf: Make add_fib_rules per network namespace flag (diff)
downloadlinux-dev-ff3416fb5b02cfae94591ef4395b0b4dc793f25e.tar.xz
linux-dev-ff3416fb5b02cfae94591ef4395b0b4dc793f25e.zip
can: dev: make can_change_state() robust to be called with cf == NULL
In OOM situations where no skb can be allocated, can_change_state() may be called with cf == NULL. As this function updates the state and error statistics it's not an option to skip the call to can_change_state() in OOM situations. This patch makes can_change_state() robust, so that it can be called with cf == NULL. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers/net/can')
-rw-r--r--drivers/net/can/dev.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 611d16a7061d..ae4ed03dc642 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -391,6 +391,9 @@ void can_change_state(struct net_device *dev, struct can_frame *cf,
can_update_state_error_stats(dev, new_state);
priv->state = new_state;
+ if (!cf)
+ return;
+
if (unlikely(new_state == CAN_STATE_BUS_OFF)) {
cf->can_id |= CAN_ERR_BUSOFF;
return;