aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/processor/fibEntry.c
diff options
context:
space:
mode:
authorJordan Augé <jordan.auge+fdio@cisco.com>2021-01-20 16:32:34 +0100
committerJacques SAMAIN <jsamain+fdio@cisco.com>2021-01-27 13:43:39 +0000
commit9b0e459e9d3300fba34c87e8afcb847d83971173 (patch)
treedec73f98c3e3801d3ba4206cfb0e05a12d55065c /hicn-light/src/hicn/processor/fibEntry.c
parent2d33dfd939488b81cc4a23f78f949e72391ef236 (diff)
[HICN-668] Fix leaks + double free
Change-Id: I88795e5dc2a55df7ffee5cf66a9bd4fa5652e353 Signed-off-by: Jordan Augé <jordan.auge+fdio@cisco.com>
Diffstat (limited to 'hicn-light/src/hicn/processor/fibEntry.c')
-rw-r--r--hicn-light/src/hicn/processor/fibEntry.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/hicn-light/src/hicn/processor/fibEntry.c b/hicn-light/src/hicn/processor/fibEntry.c
index 7412b4ccf..30bcc1f9a 100644
--- a/hicn-light/src/hicn/processor/fibEntry.c
+++ b/hicn-light/src/hicn/processor/fibEntry.c
@@ -64,8 +64,9 @@ struct fib_entry {
#endif /* WITH_POLICY */
#ifdef WITH_MAPME
NumberSet * previous_nexthops;
+ const void *userDataOwner;
void *userData;
- void (*userDataRelease)(void **userData);
+ void (*userDataRelease)(const void *owner, void **userData);
#endif /* WITH_MAPME */
};
@@ -101,6 +102,7 @@ FibEntry *fibEntry_Create(Name *name, strategy_type fwdStrategy) {
fibEntry->refcount = 1;
#ifdef WITH_MAPME
+ fibEntry->userDataOwner = NULL;
fibEntry->userData = NULL;
fibEntry->userDataRelease = NULL;
#endif /* WITH_MAPME */
@@ -136,7 +138,7 @@ void fibEntry_Release(FibEntry **fibEntryPtr) {
fibEntry->fwdStrategy->destroy(&(fibEntry->fwdStrategy));
#ifdef WITH_MAPME
if (fibEntry->userData) {
- fibEntry->userDataRelease(&fibEntry->userData);
+ fibEntry->userDataRelease(fibEntry->userDataOwner, &fibEntry->userData);
}
#endif /* WITH_MAPME */
#ifdef WITH_POLICY
@@ -881,9 +883,10 @@ void *fibEntry_getUserData(const FibEntry *fibEntry) {
return fibEntry->userData;
}
-void fibEntry_setUserData(FibEntry *fibEntry, const void *userData,
- void (*userDataRelease)(void **)) {
+void fibEntry_setUserData(FibEntry *fibEntry, const void *userDataOwner, const
+ void *userData, void (*userDataRelease)(const void *, void **)) {
parcAssertNotNull(fibEntry, "Parameter fibEntry must be non-null");
+ fibEntry->userDataOwner = userDataOwner;
fibEntry->userData = (void *)userData;
fibEntry->userDataRelease = userDataRelease;
}