From 9b0e459e9d3300fba34c87e8afcb847d83971173 Mon Sep 17 00:00:00 2001 From: Jordan Augé Date: Wed, 20 Jan 2021 16:32:34 +0100 Subject: [HICN-668] Fix leaks + double free MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I88795e5dc2a55df7ffee5cf66a9bd4fa5652e353 Signed-off-by: Jordan Augé --- hicn-light/src/hicn/processor/fibEntry.c | 11 +++++++---- hicn-light/src/hicn/processor/fibEntry.h | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'hicn-light/src/hicn/processor') 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; } diff --git a/hicn-light/src/hicn/processor/fibEntry.h b/hicn-light/src/hicn/processor/fibEntry.h index 3f78f47dd..cf267d6a6 100644 --- a/hicn-light/src/hicn/processor/fibEntry.h +++ b/hicn-light/src/hicn/processor/fibEntry.h @@ -158,8 +158,8 @@ void *fibEntry_getUserData(const FibEntry *fibEntry); * @param [in@ userDataRelease - Callback used to release user data upon change * of FIB entry removal. */ -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 **)); #endif /* WITH_MAPME */ -- cgit 1.2.3-korg