[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH] top: do not overflow the scratch buffer when displaying processes with very large VSZ
From:       William Pitcock <nenolod () dereferenced ! org>
Date:       2018-03-07 4:39:25
Message-ID: CA+T2pCEhDePh6QNX=QJrM7HE_OU6Ufh226+=gnfUNx32J1KpmA () mail ! gmail ! com
[Download RAW message or body]

Hi,

On Tue, Mar 6, 2018 at 8:57 PM, Denys Vlasenko <vda.linux@googlemail.com> wrote:
> > --- a/procps/top.c
> > +++ b/procps/top.c
> > @@ -694,10 +694,14 @@ static NOINLINE void display_process_list(int lines_rem, \
> > int scr_width) CALC_STAT(pcpu, (s->pcpu*pcpu_scale + pcpu_half) >> pcpu_shift);
> > #endif
> > 
> > -               if (s->vsz >= 100000)
> > -                       sprintf(vsz_str_buf, "%6ldm", s->vsz/1024);
> > +               if ((s->vsz / (1024 * 1024)) >= 100000)
> > +                       snprintf(vsz_str_buf, sizeof(vsz_str_buf), "%6ldt", \
> > s->vsz/(1024 * 1024 * 1024)); +               else if ((s->vsz / 1024) >= 100000)
> > +                       snprintf(vsz_str_buf, sizeof(vsz_str_buf), "%6ldg", \
> > s->vsz/(1024 * 1024)); +               else if (s->vsz >= 100000)
> > +                       snprintf(vsz_str_buf, sizeof(vsz_str_buf), "%6ldm", \
> > s->vsz/1024); else
> > -                       sprintf(vsz_str_buf, "%7lu", s->vsz);
> > +                       snprintf(vsz_str_buf, sizeof(vsz_str_buf), "%7lu", \
> > s->vsz); /* PID PPID USER STAT VSZ %VSZ [%CPU] COMMAND */
> > col = snprintf(line_buf, scr_width,
> > "\n" "%5u%6u %-8.8s %s%s" FMT
> 
> I propose this instead:
> 
> 
> -               if (s->vsz >= 100000)
> -                       sprintf(vsz_str_buf, "%6ldm", s->vsz/1024);
> -               else
> -                       sprintf(vsz_str_buf, "%7lu", s->vsz);
> +               smart_ulltoa5(s->vsz, vsz_str_buf, " mgtpezy");
> /* PID PPID USER STAT VSZ %VSZ [%CPU] COMMAND */
> col = snprintf(line_buf, scr_width,
> -                               "\n" "%5u%6u %-8.8s %s%s" FMT
> +                               "\n" "%5u%6u %-8.8s %s  %.5s" FMT
> IF_FEATURE_TOP_SMP_PROCESS(" %3d")
> IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE(FMT)
> " ",

Sounds good to me.  I wasn't aware of smart_ulltoa5().

William
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic