From: Andrey Volk Date: Mon, 19 Aug 2019 17:35:23 +0000 (+0400) Subject: FS-11981: [Core] Fix FreeSWITCH crash when timerfd is initialized with an error. X-Git-Tag: v1.10.1^2~5^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48b8fa5864548322944bdcdad0671ffbdc32cffb;p=thirdparty%2Ffreeswitch.git FS-11981: [Core] Fix FreeSWITCH crash when timerfd is initialized with an error. --- 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; }