diff options
| -rw-r--r-- | windows/winfw/src/winfw/objectpurger.cpp | 16 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/objectpurger.h | 1 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/winfw.cpp | 39 |
3 files changed, 5 insertions, 51 deletions
diff --git a/windows/winfw/src/winfw/objectpurger.cpp b/windows/winfw/src/winfw/objectpurger.cpp index 52adaac187..dce36c99c8 100644 --- a/windows/winfw/src/winfw/objectpurger.cpp +++ b/windows/winfw/src/winfw/objectpurger.cpp @@ -71,22 +71,6 @@ ObjectPurger::RemovalFunctor ObjectPurger::GetRemoveNonPersistentFunctor() } //static -ObjectPurger::RemovalFunctor ObjectPurger::GetRemovePersistentFunctor() -{ - return [](wfp::FilterEngine &engine) - { - const auto registry = MullvadGuids::DetailedRegistry(MullvadGuids::IdentityQualifier::IncludePersistent); - - // Resolve correct overload. - void(*deleter)(wfp::FilterEngine &, const GUID &) = wfp::ObjectDeleter::DeleteFilter; - - RemoveRange(engine, deleter, registry.equal_range(WfpObjectType::Filter)); - RemoveRange(engine, wfp::ObjectDeleter::DeleteSublayer, registry.equal_range(WfpObjectType::Sublayer)); - RemoveRange(engine, wfp::ObjectDeleter::DeleteProvider, registry.equal_range(WfpObjectType::Provider)); - }; -} - -//static bool ObjectPurger::Execute(RemovalFunctor f) { auto engine = wfp::FilterEngine::StandardSession(); diff --git a/windows/winfw/src/winfw/objectpurger.h b/windows/winfw/src/winfw/objectpurger.h index 9d3ca0146e..7728aac694 100644 --- a/windows/winfw/src/winfw/objectpurger.h +++ b/windows/winfw/src/winfw/objectpurger.h @@ -16,7 +16,6 @@ public: static RemovalFunctor GetRemoveFiltersFunctor(); static RemovalFunctor GetRemoveAllFunctor(); static RemovalFunctor GetRemoveNonPersistentFunctor(); - static RemovalFunctor GetRemovePersistentFunctor(); static bool Execute(RemovalFunctor f); }; diff --git a/windows/winfw/src/winfw/winfw.cpp b/windows/winfw/src/winfw/winfw.cpp index 7a6a17aec8..0ed0fe5731 100644 --- a/windows/winfw/src/winfw/winfw.cpp +++ b/windows/winfw/src/winfw/winfw.cpp @@ -222,42 +222,13 @@ WinFw_Deinitialize(WINFW_CLEANUP_POLICY cleanupPolicy) if (WINFW_CLEANUP_POLICY_BLOCK_UNTIL_REBOOT == cleanupPolicy && FwContext::Policy::Blocked == activePolicy) { - try - { - auto engine = wfp::FilterEngine::StandardSession(DEINITIALIZE_TIMEOUT); - auto sessionController = std::make_unique<SessionController>(std::move(engine)); - - rules::baseline::BlockAll blockAll; - - if (nullptr != g_logSink) - { - g_logSink(MULLVAD_LOG_LEVEL_DEBUG, "Adding ephemeral block rules", g_logSinkContext); - } - - return sessionController->executeTransaction([&](SessionController &controller, wfp::FilterEngine &engine) - { - // Keep non-persistent filters intact, the intent is just to *not* - // persist any filters across a BFE restart, not muck around with - // any other filters. We will apply blocking filters anyway. - ObjectPurger::GetRemovePersistentFunctor()(engine); - - return controller.addProvider(*MullvadObjects::Provider()) - && controller.addSublayer(*MullvadObjects::SublayerBaseline()) - && blockAll.apply(controller); - }); - } - catch (std::exception & err) - { - if (nullptr != g_logSink) - { - g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); - } - return false; - } - catch (...) + if (nullptr != g_logSink) { - return false; + g_logSink(MULLVAD_LOG_LEVEL_DEBUG, "Keeping ephemeral block rules", g_logSinkContext); } + + // All we have to is *not* call WinFw_Reset, since blocking filters have been applied. + return true; } return WINFW_POLICY_STATUS_SUCCESS == WinFw_Reset(); |
