From: Denys Vlasenko Date: Fri, 19 Aug 2016 09:07:31 +0000 (+0200) Subject: top: move free(prev_hist) out of signal path X-Git-Tag: 1_26_0~298 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=aedc3fe19fac368dc363050e0387d263b7e01cc6;p=oweals%2Fbusybox.git top: move free(prev_hist) out of signal path It was seen being called recursively on repeated signals, leading to double free Signed-off-by: Denys Vlasenko --- diff --git a/procps/top.c b/procps/top.c index 73cd285f0..6f7f7d382 100644 --- a/procps/top.c +++ b/procps/top.c @@ -728,12 +728,6 @@ static void reset_term(void) { if (!OPT_BATCH_MODE) tcsetattr_stdin_TCSANOW(&initial_settings); - if (ENABLE_FEATURE_CLEAN_UP) { - clearmems(); -# if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE - free(prev_hist); -# endif - } } static void sig_catcher(int sig) @@ -1258,5 +1252,11 @@ int top_main(int argc UNUSED_PARAM, char **argv) #if ENABLE_FEATURE_USE_TERMIOS reset_term(); #endif + if (ENABLE_FEATURE_CLEAN_UP) { + clearmems(); +#if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE + free(prev_hist); +#endif + } return EXIT_SUCCESS; }