From cdcb405119fd924c0c71bfc3b7b0295a9a09c327 Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Thu, 25 Mar 2021 09:56:11 -0400 Subject: [PATCH] libs: fix race in pcep lib Fix a race in the libpcep timer code; reported by coverity. Signed-off-by: Mark Stapp --- pceplib/pcep_timers.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pceplib/pcep_timers.c b/pceplib/pcep_timers.c index e9d9d4b21d..d0a2349d05 100644 --- a/pceplib/pcep_timers.c +++ b/pceplib/pcep_timers.c @@ -457,10 +457,17 @@ void pceplib_external_timer_expire_handler(void *data) } pcep_timer *timer = (pcep_timer *)data; + pthread_mutex_lock(&timers_context_->timer_list_lock); ordered_list_node *timer_node = ordered_list_find2(timers_context_->timer_list, timer, timer_list_node_timer_ptr_compare); + + /* Remove timer from list */ + if (timer_node) + ordered_list_remove_node2(timers_context_->timer_list, + timer_node); + pthread_mutex_unlock(&timers_context_->timer_list_lock); /* Cannot continue if the timer does not exist */ @@ -474,9 +481,5 @@ void pceplib_external_timer_expire_handler(void *data) timers_context_->expire_handler(timer->data, timer->timer_id); - pthread_mutex_lock(&timers_context_->timer_list_lock); - ordered_list_remove_node2(timers_context_->timer_list, timer_node); - pthread_mutex_unlock(&timers_context_->timer_list_lock); - pceplib_free(PCEPLIB_INFRA, timer); }