diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2019-11-08 14:02:10 +0100 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2019-11-13 10:42:34 +0100 |
commit | 8d7a5f000e235f1dfc61862197d4e8e72c18c6fc (patch) | |
tree | 9ba4b3feca917f6a2c438a8d2c518c71144c79d5 /net/can | |
parent | 62ebce1dc1fa649a1c54db02f1a3c409bb0529ec (diff) | |
download | linux-8d7a5f000e235f1dfc61862197d4e8e72c18c6fc.tar.bz2 |
can: j1939: transport: j1939_cancel_active_session(): use hrtimer_try_to_cancel() instead of hrtimer_cancel()
This part of the code protected by lock used in the hrtimer as well.
Using hrtimer_cancel() will trigger dead lock.
Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Diffstat (limited to 'net/can')
-rw-r--r-- | net/can/j1939/transport.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c index afc2adfd97e4..0c62b8fc4b20 100644 --- a/net/can/j1939/transport.c +++ b/net/can/j1939/transport.c @@ -2039,7 +2039,11 @@ int j1939_cancel_active_session(struct j1939_priv *priv, struct sock *sk) &priv->active_session_list, active_session_list_entry) { if (!sk || sk == session->sk) { - j1939_session_timers_cancel(session); + if (hrtimer_try_to_cancel(&session->txtimer) == 1) + j1939_session_put(session); + if (hrtimer_try_to_cancel(&session->rxtimer) == 1) + j1939_session_put(session); + session->err = ESHUTDOWN; j1939_session_deactivate_locked(session); } |