Konstantin Khorenko
4faf1cc3db
kernel/module.c: wakeup processes in module_wq on module unload
...
[ Upstream commit 5d60331161 ]
Fix the race between load and unload a kernel module.
sys_delete_module()
try_stop_module()
mod->state = _GOING
add_unformed_module()
old = find_module_all()
(old->state == _GOING =>
wait_event_interruptible())
During pre-condition
finished_loading() rets 0
schedule()
(never gets waken up later)
free_module()
mod->state = _UNFORMED
list_del_rcu(&mod->list)
(dels mod from "modules" list)
return
The race above leads to modprobe hanging forever on loading
a module.
Error paths on loading module call wake_up_all(&module_wq) after
freeing module, so let's do the same on straight module unload.
Fixes: 6e6de3dee5 ("kernel/module.c: Only return -EEXIST for modules that have finished loading")
Reviewed-by: Prarit Bhargava <prarit@redhat.com >
Signed-off-by: Konstantin Khorenko <khorenko@virtuozzo.com >
Signed-off-by: Jessica Yu <jeyu@kernel.org >
Signed-off-by: Sasha Levin <sashal@kernel.org >
2019-12-17 20:40:02 +01:00
..
2019-12-05 15:38:00 +01:00
2019-12-17 20:39:29 +01:00
2017-08-22 18:43:23 -07:00
2019-02-12 19:46:09 +01:00
2019-11-20 17:59:52 +01:00
2017-11-02 11:10:55 +01:00
2019-09-19 09:08:04 +02:00
2019-10-07 18:55:09 +02:00
2019-10-11 18:18:36 +02:00
2019-06-11 12:21:48 +02:00
2019-12-01 09:13:17 +01:00
2019-05-31 06:47:33 -07:00
2019-12-17 20:38:43 +01:00
2019-10-11 18:18:46 +02:00
2019-11-06 12:43:20 +01:00
2015-10-21 15:18:35 +01:00
2018-01-10 09:31:17 +01:00
2018-02-16 20:23:05 +01:00
2017-05-03 11:05:15 -07:00
2017-11-02 11:10:55 +01:00
2019-12-17 20:37:27 +01:00
2018-05-30 07:52:39 +02:00
2017-09-03 20:21:24 -04:00
2019-05-31 06:47:25 -07:00
2019-12-01 09:14:03 +01:00
2018-11-13 11:15:08 -08:00
2017-11-02 11:10:55 +01:00
2018-05-16 10:10:26 +02:00
2016-12-24 11:46:01 -08:00
2015-11-24 09:56:43 +01:00
2017-07-31 13:09:49 +02:00
2019-11-24 08:23:08 +01:00
2018-01-17 09:45:27 +01:00
2019-07-31 07:28:58 +02:00
2018-08-03 07:50:38 +02:00
2017-11-02 11:10:55 +01:00
2019-10-11 18:18:42 +02:00
2017-11-02 11:10:55 +01:00
2019-12-05 15:38:27 +01:00
2017-09-23 16:50:20 -04:00
2019-12-05 15:38:26 +01:00
2016-07-28 16:07:41 -07:00
2019-12-05 15:38:28 +01:00
2017-12-20 10:10:18 +01:00
2019-04-20 09:15:05 +02:00
2015-11-23 09:44:58 +01:00
2018-12-05 19:41:17 +01:00
2019-09-21 07:15:38 +02:00
2017-11-02 11:10:55 +01:00
2016-10-25 11:31:51 +02:00
2018-08-03 07:50:22 +02:00
2019-11-24 08:23:15 +01:00
2017-07-12 16:26:02 -07:00
2017-11-02 11:10:55 +01:00
2017-07-12 16:26:00 -07:00
2017-09-08 18:26:51 -07:00
2019-11-20 17:59:56 +01:00
2017-07-12 16:25:59 -07:00
2018-08-03 07:50:21 +02:00
2017-03-02 08:42:39 +01:00
2019-12-05 15:38:22 +01:00
2019-01-13 10:01:02 +01:00
2016-04-11 22:43:43 +01:00
2019-12-17 20:40:02 +01:00
2017-02-24 17:46:56 -08:00
2017-03-13 15:57:41 -03:00
2019-07-31 07:28:39 +02:00
2019-10-17 13:43:19 -07:00
2017-10-03 17:54:26 -07:00
2019-07-31 07:28:21 +02:00
2017-08-21 12:47:31 -07:00
2017-03-02 08:42:39 +01:00
2019-07-10 09:54:38 +02:00
2017-11-02 11:10:55 +01:00
2015-09-10 13:29:01 -07:00
2019-03-13 14:03:20 -07:00
2018-04-24 09:36:22 +02:00
2018-05-22 18:54:04 +02:00
2019-11-20 17:59:52 +01:00
2019-02-12 19:46:13 +01:00
2017-10-04 10:53:54 +02:00
2017-11-02 11:10:55 +01:00
2018-08-15 18:12:47 +02:00
2017-03-08 09:18:02 +01:00
2018-09-05 09:26:36 +02:00
2017-11-02 11:10:55 +01:00
2019-06-15 11:54:52 +02:00
2017-11-02 11:10:55 +01:00
2019-06-15 11:54:51 +02:00
2017-12-25 14:26:21 +01:00
2017-05-08 17:15:12 -07:00
2017-07-25 13:04:45 -07:00
2018-05-09 09:51:50 +02:00
2017-03-02 08:42:39 +01:00
2017-03-06 15:26:37 -06:00
2017-12-20 10:10:18 +01:00
2017-09-08 18:26:50 -07:00
2017-08-29 15:14:38 +02:00
2018-09-09 19:56:00 +02:00
2017-03-02 08:42:29 +01:00
2018-09-09 19:56:00 +02:00
2017-03-02 08:42:38 +01:00
2018-09-05 09:26:42 +02:00
2018-09-05 09:26:42 +02:00
2017-11-06 12:26:49 -08:00
2019-12-17 20:39:59 +01:00