diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c index 1c425b378f56..ff15d885d428 100644 --- a/net/netfilter/xt_IDLETIMER.c +++ b/net/netfilter/xt_IDLETIMER.c @@ -691,10 +691,10 @@ static void idletimer_tg_destroy(const struct xt_tgdtor_param *par) list_del(&info->timer->entry); mutex_unlock(&list_mutex); - timer_shutdown_sync(&info->timer->timer); - sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr); unregister_pm_notifier(&info->timer->pm_nb); + timer_shutdown_sync(&info->timer->timer); cancel_work_sync(&info->timer->work); + sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr); kfree(info->timer->attr.attr.name); kfree(info->timer); } @@ -719,14 +719,14 @@ static void idletimer_tg_destroy_v1(const struct xt_tgdtor_param *par) list_del(&info->timer->entry); mutex_unlock(&list_mutex); + unregister_pm_notifier(&info->timer->pm_nb); if (info->timer->timer_type & XT_IDLETIMER_ALARM) { alarm_cancel(&info->timer->alarm); } else { timer_shutdown_sync(&info->timer->timer); } - sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr); - unregister_pm_notifier(&info->timer->pm_nb); cancel_work_sync(&info->timer->work); + sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr); kfree(info->timer->attr.attr.name); kfree(info->timer); }