You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pe...@apache.org on 2022/07/07 12:14:43 UTC

[celix] branch hotfix/use-after-free updated: Fix possible use-after-free.

This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch hotfix/use-after-free
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to refs/heads/hotfix/use-after-free by this push:
     new abcd53c0 Fix possible use-after-free.
abcd53c0 is described below

commit abcd53c0120f1a1b9c065c54cd7400b0d19de054
Author: PengZheng <ho...@gmail.com>
AuthorDate: Thu Jul 7 20:14:34 2022 +0800

    Fix possible use-after-free.
    
    Suppose that we allocate memory in actStart to implement a service, which is managed by dm, and that in actStop we deallocate it, we must first stop the dm from using the service before deallocation happens.
---
 libs/framework/include/celix_bundle_activator.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libs/framework/include/celix_bundle_activator.h b/libs/framework/include/celix_bundle_activator.h
index 19dc1770..30f82579 100644
--- a/libs/framework/include/celix_bundle_activator.h
+++ b/libs/framework/include/celix_bundle_activator.h
@@ -149,12 +149,12 @@ celix_status_t celix_bundleActivator_start(void *userData, celix_bundle_context_
                                                                                                                        \
 celix_status_t celix_bundleActivator_stop(void *userData, celix_bundle_context_t *ctx) {                               \
     celix_status_t status = CELIX_SUCCESS;                                                                             \
+    celix_dependency_manager_t* mng = celix_bundleContext_getDependencyManager(ctx);                                   \
+    celix_dependencyManager_removeAllComponents(mng);                                                                  \
     celix_status_t (*fn)(actType*, celix_bundle_context_t*) = (actStop);                                               \
     if (fn != NULL) {                                                                                                  \
         status = fn((actType*)userData, ctx);                                                                          \
     }                                                                                                                  \
-    celix_dependency_manager_t* mng = celix_bundleContext_getDependencyManager(ctx);                                   \
-    celix_dependencyManager_removeAllComponents(mng);                                                                  \
     return status;                                                                                                     \
 }                                                                                                                      \
                                                                                                                        \