From d1fbc5fbd46727080ae51bb20dfa7c20b1707fb1 Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Fri, 18 May 2018 00:00:00 -0500 Subject: [PATCH] top: Check graph_cpus, graph_mems, and sum... REVERTED The variables graph_cpus, graph_mems & summ_mscale are all well managed in a running top. They were, however, each vulnerable to tampering via the rcfile. So rather than continually addressing the symptoms, we'll attack the root cause just once at startup in the next patch. Reference(s): . original qualys patch 0099-top-Check-graph_cpus-graph_mems-and-summ_mscale.patch commit cd8ba5670e21f8016e14efd247ed2dd6af887aea Signed-off-by: Jim Warner --- top/top.c | 71 +++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/top/top.c b/top/top.c index 0bb10a03..5244e589 100644 --- a/top/top.c +++ b/top/top.c @@ -5456,13 +5456,13 @@ static void summary_hlp (CPU_t *cpu, const char *pfx) { /* display some kinda' cpu state percentages (who or what is explained by the passed prefix) */ - static const struct { - const char *user, *syst, *type; - } gtab[] = { - { "%-.*s~7", "%-.*s~8", Graph_bars }, - { "%-.*s~4", "%-.*s~6", Graph_blks } - }; - if (Curwin->rc.graph_cpus >= 1 && (size_t)Curwin->rc.graph_cpus <= sizeof(gtab) / sizeof(gtab[0])) { + if (Curwin->rc.graph_cpus) { + static struct { + const char *user, *syst, *type; + } gtab[] = { + { "%-.*s~7", "%-.*s~8", Graph_bars }, + { "%-.*s~4", "%-.*s~6", Graph_blks } + }; char user[SMLBUFSIZ], syst[SMLBUFSIZ], dual[MEDBUFSIZ]; int ix = Curwin->rc.graph_cpus - 1; float pct_user = (float)(u_frme + n_frme) * scale, @@ -5577,33 +5577,32 @@ numa_nope: } // end: View_STATES // Display Memory and Swap stats - static struct { - float div; - const char *fmts; - const char *label; - } scaletab[] = { - { 1, "%.0f ", NULL }, // kibibytes -#ifdef BOOST_MEMORY - { 1024.0, "%#.3f ", NULL }, // mebibytes - { 1024.0*1024, "%#.3f ", NULL }, // gibibytes - { 1024.0*1024*1024, "%#.3f ", NULL }, // tebibytes - { 1024.0*1024*1024*1024, "%#.3f ", NULL }, // pebibytes - { 1024.0*1024*1024*1024*1024, "%#.3f ", NULL } // exbibytes -#else - { 1024.0, "%#.1f ", NULL }, // mebibytes - { 1024.0*1024, "%#.1f ", NULL }, // gibibytes - { 1024.0*1024*1024, "%#.1f ", NULL }, // tebibytes - { 1024.0*1024*1024*1024, "%#.1f ", NULL }, // pebibytes - { 1024.0*1024*1024*1024*1024, "%#.1f ", NULL } // exbibytes -#endif - }; - if (isROOM(View_MEMORY, 2) && - Rc.summ_mscale >= 0 && (size_t)Rc.summ_mscale < sizeof(scaletab) / sizeof(scaletab[0])) { + if (isROOM(View_MEMORY, 2)) { #define bfT(n) buftab[n].buf #define scT(e) scaletab[Rc.summ_mscale]. e #define mkM(x) (float)kb_main_ ## x / scT(div) #define mkS(x) (float)kb_swap_ ## x / scT(div) #define prT(b,z) { if (9 < snprintf(b, 10, scT(fmts), z)) b[8] = '+'; } + static struct { + float div; + const char *fmts; + const char *label; + } scaletab[] = { + { 1, "%.0f ", NULL }, // kibibytes +#ifdef BOOST_MEMORY + { 1024.0, "%#.3f ", NULL }, // mebibytes + { 1024.0*1024, "%#.3f ", NULL }, // gibibytes + { 1024.0*1024*1024, "%#.3f ", NULL }, // tebibytes + { 1024.0*1024*1024*1024, "%#.3f ", NULL }, // pebibytes + { 1024.0*1024*1024*1024*1024, "%#.3f ", NULL } // exbibytes +#else + { 1024.0, "%#.1f ", NULL }, // mebibytes + { 1024.0*1024, "%#.1f ", NULL }, // gibibytes + { 1024.0*1024*1024, "%#.1f ", NULL }, // tebibytes + { 1024.0*1024*1024*1024, "%#.1f ", NULL }, // pebibytes + { 1024.0*1024*1024*1024*1024, "%#.1f ", NULL } // exbibytes +#endif + }; struct { // 0123456789 // snprintf contents of each buf (after SK_Kb): 'nnnn.nnn 0' // and prT macro might replace space at buf[8] with: ------> + @@ -5619,13 +5618,13 @@ numa_nope: scaletab[5].label = N_txt(AMT_exxabyte_txt); } - static const struct { - const char *used, *misc, *swap, *type; - } gtab[] = { - { "%-.*s~7", "%-.*s~8", "%-.*s~8", Graph_bars }, - { "%-.*s~4", "%-.*s~6", "%-.*s~6", Graph_blks } - }; - if (w->rc.graph_mems >= 1 && (size_t)w->rc.graph_mems <= sizeof(gtab) / sizeof(gtab[0])) { + if (w->rc.graph_mems) { + static struct { + const char *used, *misc, *swap, *type; + } gtab[] = { + { "%-.*s~7", "%-.*s~8", "%-.*s~8", Graph_bars }, + { "%-.*s~4", "%-.*s~6", "%-.*s~6", Graph_blks } + }; char used[SMLBUFSIZ], util[SMLBUFSIZ], dual[MEDBUFSIZ]; float pct_used, pct_misc, pct_swap; int ix, num_used, num_misc;