qed: Fix race condition between scheduling and destroying the slowpath workqueue
authorYuval Basson <ybason@marvell.com>
Wed, 25 Mar 2020 20:50:43 +0000 (22:50 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Mar 2020 04:50:17 +0000 (21:50 -0700)
commit3b85720d3fd72e6ef4de252cd2f67548eb645eb4
tree42f2fd37cba5c75362538ae91df1283538a8ae4f
parent798dda818ad1fdad6240959241194b490d6660ee
qed: Fix race condition between scheduling and destroying the slowpath workqueue

Calling queue_delayed_work concurrently with
destroy_workqueue might race to an unexpected outcome -
scheduled task after wq is destroyed or other resources
(like ptt_pool) are freed (yields NULL pointer dereference).
cancel_delayed_work prevents the race by cancelling
the timer triggered for scheduling a new task.

Fixes: 59ccf86fe ("qed: Add driver infrastucture for handling mfw requests")
Signed-off-by: Denis Bolotin <dbolotin@marvell.com>
Signed-off-by: Michal Kalderon <mkalderon@marvell.com>
Signed-off-by: Yuval Basson <ybason@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_main.c