diff options
author | Jordan Augé <jordan.auge+fdio@cisco.com> | 2021-01-20 16:32:34 +0100 |
---|---|---|
committer | Jacques SAMAIN <jsamain+fdio@cisco.com> | 2021-01-27 13:43:39 +0000 |
commit | 9b0e459e9d3300fba34c87e8afcb847d83971173 (patch) | |
tree | dec73f98c3e3801d3ba4206cfb0e05a12d55065c /hicn-light/src/hicn/processor/fibEntry.c | |
parent | 2d33dfd939488b81cc4a23f78f949e72391ef236 (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.c | 11 |
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; } |