RE: [PATCH makedumpfile] Fix array index out of bound exception

2018-03-23 Thread Masaki Tachibana
Hi Lianbo,

Sorry for the late reply.
Thank you for the patch.
I will merge it into V1.6.4.

Thanks
Tachibana

> -Original Message-
> From: kexec [mailto:kexec-boun...@lists.infradead.org] On Behalf Of Masaki 
> Tachibana
> Sent: Wednesday, March 07, 2018 2:07 PM
> To: lijiang <liji...@redhat.com>
> Cc: kexec@lists.infradead.org; Hayashi Masahiko() 
> <mas-haya...@tg.jp.nec.com>; piliu <pi...@redhat.com>
> Subject: RE: [PATCH makedumpfile] Fix array index out of bound exception
> 
> Hi Lianbo,
> 
> Thank you for your patch.
> I understand the purpose of the patch.
> I'll reply formally in 10 days or so.
> 
> Thanks
> Tachibana
> 
> > -Original Message-
> > From: lijiang [mailto:liji...@redhat.com]
> > Sent: Wednesday, March 07, 2018 10:25 AM
> > To: kexec@lists.infradead.org
> > Cc: Tachibana Masaki() <mas-tachib...@vf.jp.nec.com>; Hayashi Masahiko() 
> > <mas-haya...@tg.jp.nec.com>;
> > piliu <pi...@redhat.com>
> > Subject: Re: [PATCH makedumpfile] Fix array index out of bound exception
> >
> > Also cc Masaki/Masahiko/piliu.
> >
> > Thanks.
> >
> > Lianbo
> >  20180306 18:07, Lianbo Jiang :
> > > A data overflow may lead to a reversal, which may turn a positive
> > > number into a large negative number, in this case, the string's
> > > length will exceed the array size(for example, eta: -2147483648s),
> > > here the array size is defined 16 characters. So, it is nessasary
> > > to consider some exceptions.
> > >
> > > Signed-off-by: Lianbo Jiang <liji...@redhat.com>
> > > ---
> > >  print_info.c | 21 +
> > >  1 file changed, 13 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/print_info.c b/print_info.c
> > > index e0e6a27..09e215a 100644
> > > --- a/print_info.c
> > > +++ b/print_info.c
> > > @@ -16,6 +16,8 @@
> > >  #include "print_info.h"
> > >  #include 
> > >  #include 
> > > +#include 
> > > +#include 
> > >
> > >  #define PROGRESS_MAXLEN  "50"
> > >
> > > @@ -352,18 +354,21 @@ static void calc_delta(struct timeval *tv_start, 
> > > struct timeval *delta)
> > >  }
> > >
> > >  /* produce less than 12 bytes on msg */
> > > -static int eta_to_human_short (int secs, char* msg)
> > > +static int eta_to_human_short (int64_t secs, char* msg, int maxsize)
> > >  {
> > >   strcpy(msg, "eta: ");
> > >   msg += strlen("eta: ");
> > >   if (secs < 100)
> > > - sprintf(msg, "%ds", secs);
> > > + snprintf(msg, maxsize, "%"PRId64"s", secs);
> > >   else if (secs < 100 * 60)
> > > - sprintf(msg, "%dm%ds", secs / 60, secs % 60);
> > > + snprintf(msg, maxsize, "%"PRId64"m""%"PRId64"s",
> > > + secs / 60, secs % 60);
> > >   else if (secs < 48 * 3600)
> > > - sprintf(msg, "%dh%dm", secs / 3600, (secs / 60) % 60);
> > > + snprintf(msg, maxsize, "%"PRId64"h""%"PRId64"m",
> > > + secs / 3600, (secs / 60) % 60);
> > >   else if (secs < 100 * 86400)
> > > - sprintf(msg, "%dd%dh", secs / 86400, (secs / 3600) % 24);
> > > + snprintf(msg, maxsize, "%"PRId64"d""%"PRId64"h",
> > > + secs / 86400, (secs / 3600) % 24);
> > >   else
> > >   sprintf(msg, ">2day");
> > >   return 0;
> > > @@ -379,8 +384,8 @@ print_progress(const char *msg, unsigned long 
> > > current, unsigned long end, struct
> > >   static unsigned int lapse = 0;
> > >   static const char *spinner = "/|\\-";
> > >   struct timeval delta;
> > > - double eta;
> > > - char eta_msg[16] = " ";
> > > + int64_t eta;
> > > + char eta_msg[32] = " ";
> > >
> > >   if (current < end) {
> > >   tm = time(NULL);
> > > @@ -395,7 +400,7 @@ print_progress(const char *msg, unsigned long 
> > > current, unsigned long end, struct
> > >   calc_delta(start, );
> > >   eta = delta.tv_sec + delta.tv_usec / 1e6;
> > >   eta = (100 - progress) * eta / progress;
> > > - eta_to_human_short(eta, eta_msg);
> > > + eta_to_human_short(eta, eta_msg, sizeof(eta_msg));
> > >   }
> > >   if (flag_ignore_r_char) {
> > >   PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c  %16s\n",
> > >
> 
> ___
> kexec mailing list
> kexec@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec



___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


RE: [PATCH makedumpfile] Fix array index out of bound exception

2018-03-06 Thread Masaki Tachibana
Hi Lianbo,

Thank you for your patch.
I understand the purpose of the patch.
I'll reply formally in 10 days or so.

Thanks
Tachibana

> -Original Message-
> From: lijiang [mailto:liji...@redhat.com]
> Sent: Wednesday, March 07, 2018 10:25 AM
> To: kexec@lists.infradead.org
> Cc: Tachibana Masaki() <mas-tachib...@vf.jp.nec.com>; Hayashi Masahiko() 
> <mas-haya...@tg.jp.nec.com>;
> piliu <pi...@redhat.com>
> Subject: Re: [PATCH makedumpfile] Fix array index out of bound exception
> 
> Also cc Masaki/Masahiko/piliu.
> 
> Thanks.
> 
> Lianbo
>  20180306 18:07, Lianbo Jiang :
> > A data overflow may lead to a reversal, which may turn a positive
> > number into a large negative number, in this case, the string's
> > length will exceed the array size(for example, eta: -2147483648s),
> > here the array size is defined 16 characters. So, it is nessasary
> > to consider some exceptions.
> >
> > Signed-off-by: Lianbo Jiang <liji...@redhat.com>
> > ---
> >  print_info.c | 21 +
> >  1 file changed, 13 insertions(+), 8 deletions(-)
> >
> > diff --git a/print_info.c b/print_info.c
> > index e0e6a27..09e215a 100644
> > --- a/print_info.c
> > +++ b/print_info.c
> > @@ -16,6 +16,8 @@
> >  #include "print_info.h"
> >  #include 
> >  #include 
> > +#include 
> > +#include 
> >
> >  #define PROGRESS_MAXLEN"50"
> >
> > @@ -352,18 +354,21 @@ static void calc_delta(struct timeval *tv_start, 
> > struct timeval *delta)
> >  }
> >
> >  /* produce less than 12 bytes on msg */
> > -static int eta_to_human_short (int secs, char* msg)
> > +static int eta_to_human_short (int64_t secs, char* msg, int maxsize)
> >  {
> > strcpy(msg, "eta: ");
> > msg += strlen("eta: ");
> > if (secs < 100)
> > -   sprintf(msg, "%ds", secs);
> > +   snprintf(msg, maxsize, "%"PRId64"s", secs);
> > else if (secs < 100 * 60)
> > -   sprintf(msg, "%dm%ds", secs / 60, secs % 60);
> > +   snprintf(msg, maxsize, "%"PRId64"m""%"PRId64"s",
> > +   secs / 60, secs % 60);
> > else if (secs < 48 * 3600)
> > -   sprintf(msg, "%dh%dm", secs / 3600, (secs / 60) % 60);
> > +   snprintf(msg, maxsize, "%"PRId64"h""%"PRId64"m",
> > +   secs / 3600, (secs / 60) % 60);
> > else if (secs < 100 * 86400)
> > -   sprintf(msg, "%dd%dh", secs / 86400, (secs / 3600) % 24);
> > +   snprintf(msg, maxsize, "%"PRId64"d""%"PRId64"h",
> > +   secs / 86400, (secs / 3600) % 24);
> > else
> > sprintf(msg, ">2day");
> > return 0;
> > @@ -379,8 +384,8 @@ print_progress(const char *msg, unsigned long current, 
> > unsigned long end, struct
> > static unsigned int lapse = 0;
> > static const char *spinner = "/|\\-";
> > struct timeval delta;
> > -   double eta;
> > -   char eta_msg[16] = " ";
> > +   int64_t eta;
> > +   char eta_msg[32] = " ";
> >
> > if (current < end) {
> > tm = time(NULL);
> > @@ -395,7 +400,7 @@ print_progress(const char *msg, unsigned long current, 
> > unsigned long end, struct
> > calc_delta(start, );
> > eta = delta.tv_sec + delta.tv_usec / 1e6;
> > eta = (100 - progress) * eta / progress;
> > -   eta_to_human_short(eta, eta_msg);
> > +   eta_to_human_short(eta, eta_msg, sizeof(eta_msg));
> > }
> > if (flag_ignore_r_char) {
> > PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c  %16s\n",
> >

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: [PATCH makedumpfile] Fix array index out of bound exception

2018-03-06 Thread lijiang
Also cc Masaki/Masahiko/piliu.

Thanks.

Lianbo
在 2018年03月06日 18:07, Lianbo Jiang 写道:
> A data overflow may lead to a reversal, which may turn a positive
> number into a large negative number, in this case, the string's
> length will exceed the array size(for example, eta: -2147483648s),
> here the array size is defined 16 characters. So, it is nessasary
> to consider some exceptions.
> 
> Signed-off-by: Lianbo Jiang 
> ---
>  print_info.c | 21 +
>  1 file changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/print_info.c b/print_info.c
> index e0e6a27..09e215a 100644
> --- a/print_info.c
> +++ b/print_info.c
> @@ -16,6 +16,8 @@
>  #include "print_info.h"
>  #include 
>  #include 
> +#include 
> +#include 
>  
>  #define PROGRESS_MAXLEN  "50"
>  
> @@ -352,18 +354,21 @@ static void calc_delta(struct timeval *tv_start, struct 
> timeval *delta)
>  }
>  
>  /* produce less than 12 bytes on msg */
> -static int eta_to_human_short (int secs, char* msg)
> +static int eta_to_human_short (int64_t secs, char* msg, int maxsize)
>  {
>   strcpy(msg, "eta: ");
>   msg += strlen("eta: ");
>   if (secs < 100)
> - sprintf(msg, "%ds", secs);
> + snprintf(msg, maxsize, "%"PRId64"s", secs);
>   else if (secs < 100 * 60)
> - sprintf(msg, "%dm%ds", secs / 60, secs % 60);
> + snprintf(msg, maxsize, "%"PRId64"m""%"PRId64"s",
> + secs / 60, secs % 60);
>   else if (secs < 48 * 3600)
> - sprintf(msg, "%dh%dm", secs / 3600, (secs / 60) % 60);
> + snprintf(msg, maxsize, "%"PRId64"h""%"PRId64"m",
> + secs / 3600, (secs / 60) % 60);
>   else if (secs < 100 * 86400)
> - sprintf(msg, "%dd%dh", secs / 86400, (secs / 3600) % 24);
> + snprintf(msg, maxsize, "%"PRId64"d""%"PRId64"h",
> + secs / 86400, (secs / 3600) % 24);
>   else
>   sprintf(msg, ">2day");
>   return 0;
> @@ -379,8 +384,8 @@ print_progress(const char *msg, unsigned long current, 
> unsigned long end, struct
>   static unsigned int lapse = 0;
>   static const char *spinner = "/|\\-";
>   struct timeval delta;
> - double eta;
> - char eta_msg[16] = " ";
> + int64_t eta;
> + char eta_msg[32] = " ";
>  
>   if (current < end) {
>   tm = time(NULL);
> @@ -395,7 +400,7 @@ print_progress(const char *msg, unsigned long current, 
> unsigned long end, struct
>   calc_delta(start, );
>   eta = delta.tv_sec + delta.tv_usec / 1e6;
>   eta = (100 - progress) * eta / progress;
> - eta_to_human_short(eta, eta_msg);
> + eta_to_human_short(eta, eta_msg, sizeof(eta_msg));
>   }
>   if (flag_ignore_r_char) {
>   PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%5.1f %%] %c  %16s\n",
> 

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec