From 48b8fa5864548322944bdcdad0671ffbdc32cffb Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Mon, 19 Aug 2019 21:35:23 +0400 Subject: [PATCH] FS-11981: [Core] Fix FreeSWITCH crash when timerfd is initialized with an error. --- src/switch_time.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/switch_time.c b/src/switch_time.c index 46a3a08712..cbb47f9ef7 100644 --- a/src/switch_time.c +++ b/src/switch_time.c @@ -479,6 +479,10 @@ static switch_status_t _timerfd_next(switch_timer_t *timer) interval_timer_t *it = timer->private_info; uint64_t u64 = 0; + if (!it) { + return SWITCH_STATUS_GENERR; + } + if (read(it->fd, &u64, sizeof(u64)) < 0) { return SWITCH_STATUS_GENERR; } else { @@ -495,6 +499,10 @@ static switch_status_t _timerfd_check(switch_timer_t *timer, switch_bool_t step) struct itimerspec val; int diff; + if (!it) { + return SWITCH_STATUS_GENERR; + } + timerfd_gettime(it->fd, &val); diff = val.it_interval.tv_nsec / 1000; @@ -515,9 +523,12 @@ static switch_status_t _timerfd_check(switch_timer_t *timer, switch_bool_t step) static switch_status_t _timerfd_destroy(switch_timer_t *timer) { interval_timer_t *it = timer->private_info; - int rc; + int rc = SWITCH_STATUS_GENERR; + + if (it) { + rc = timerfd_stop_interval(it); + } - rc = timerfd_stop_interval(it); return rc; }