pstore: Shut down worker when unregistering
commit 6330d5534786d5315d56d558aa6d20740f97d80a upstream. When built as a module and running with update_ms >= 0, pstore will Oops during module unload since the work timer is still running. This makes sure the worker is stopped before unloading. Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a4de930086
commit
9ee8502bd2
@ -704,6 +704,7 @@ int pstore_register(struct pstore_info *psi)
|
||||
if (psi->flags & PSTORE_FLAGS_PMSG)
|
||||
pstore_register_pmsg();
|
||||
|
||||
/* Start watching for new records, if desired. */
|
||||
if (pstore_update_ms >= 0) {
|
||||
pstore_timer.expires = jiffies +
|
||||
msecs_to_jiffies(pstore_update_ms);
|
||||
@ -726,6 +727,11 @@ EXPORT_SYMBOL_GPL(pstore_register);
|
||||
|
||||
void pstore_unregister(struct pstore_info *psi)
|
||||
{
|
||||
/* Stop timer and make sure all work has finished. */
|
||||
pstore_update_ms = -1;
|
||||
del_timer_sync(&pstore_timer);
|
||||
flush_work(&pstore_work);
|
||||
|
||||
if (psi->flags & PSTORE_FLAGS_PMSG)
|
||||
pstore_unregister_pmsg();
|
||||
if (psi->flags & PSTORE_FLAGS_FTRACE)
|
||||
@ -825,7 +831,9 @@ static void pstore_timefunc(unsigned long dummy)
|
||||
schedule_work(&pstore_work);
|
||||
}
|
||||
|
||||
mod_timer(&pstore_timer, jiffies + msecs_to_jiffies(pstore_update_ms));
|
||||
if (pstore_update_ms >= 0)
|
||||
mod_timer(&pstore_timer,
|
||||
jiffies + msecs_to_jiffies(pstore_update_ms));
|
||||
}
|
||||
|
||||
module_param(backend, charp, 0444);
|
||||
|
Loading…
x
Reference in New Issue
Block a user