All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
@ 2019-10-01 15:14 Helge Deller
  2019-10-03  8:14 ` Simon Horman
  0 siblings, 1 reply; 8+ messages in thread
From: Helge Deller @ 2019-10-01 15:14 UTC (permalink / raw)
  To: Simon Horman, kexec; +Cc: Sven Schnelle

When compiling kexec-tools on a 32-bit platform, assigning an
(unsigned long long) value to an (unsigned long) variable creates
this warning:

elf_info.c: In function 'read_phys_offset_elf_kcore':
elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
  805 |  *phys_off = UINT64_MAX;
      |              ^~~~~~~~~~

Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
index 2bce5cb..4d16983 100644
--- a/util_lib/elf_info.c
+++ b/util_lib/elf_info.c
@@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
 {
 	int ret;

-	*phys_off = UINT64_MAX;
+	*phys_off = (unsigned long) UINT64_MAX;

 	ret = read_elf(fd);
 	if (!ret) {

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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-01 15:14 [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms Helge Deller
@ 2019-10-03  8:14 ` Simon Horman
  2019-10-03  8:52   ` Helge Deller
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Horman @ 2019-10-03  8:14 UTC (permalink / raw)
  To: Helge Deller; +Cc: Sven Schnelle, kexec

On Tue, Oct 01, 2019 at 05:14:16PM +0200, Helge Deller wrote:
> When compiling kexec-tools on a 32-bit platform, assigning an
> (unsigned long long) value to an (unsigned long) variable creates
> this warning:
> 
> elf_info.c: In function 'read_phys_offset_elf_kcore':
> elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
>   805 |  *phys_off = UINT64_MAX;
>       |              ^~~~~~~~~~
> 
> Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> 
> diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
> index 2bce5cb..4d16983 100644
> --- a/util_lib/elf_info.c
> +++ b/util_lib/elf_info.c
> @@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
>  {
>  	int ret;
> 
> -	*phys_off = UINT64_MAX;
> +	*phys_off = (unsigned long) UINT64_MAX;

This seems to mask the problem that UINT64_MAX is not the right
initialiser for unsigned long values on 32-bit platforms.

Could we consider using UINT64_MAX from limits.h instead?

> 
>  	ret = read_elf(fd);
>  	if (!ret) {
> 

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-03  8:14 ` Simon Horman
@ 2019-10-03  8:52   ` Helge Deller
  2019-10-04  9:37     ` Simon Horman
  0 siblings, 1 reply; 8+ messages in thread
From: Helge Deller @ 2019-10-03  8:52 UTC (permalink / raw)
  To: Simon Horman; +Cc: Sven Schnelle, kexec

On 03.10.19 10:14, Simon Horman wrote:
> On Tue, Oct 01, 2019 at 05:14:16PM +0200, Helge Deller wrote:
>> When compiling kexec-tools on a 32-bit platform, assigning an
>> (unsigned long long) value to an (unsigned long) variable creates
>> this warning:
>>
>> elf_info.c: In function 'read_phys_offset_elf_kcore':
>> elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
>>    805 |  *phys_off = UINT64_MAX;
>>        |              ^~~~~~~~~~
>>
>> Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.
>>
>> Signed-off-by: Helge Deller <deller@gmx.de>
>>
>> diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
>> index 2bce5cb..4d16983 100644
>> --- a/util_lib/elf_info.c
>> +++ b/util_lib/elf_info.c
>> @@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
>>   {
>>   	int ret;
>>
>> -	*phys_off = UINT64_MAX;
>> +	*phys_off = (unsigned long) UINT64_MAX;
>
> This seems to mask the problem that UINT64_MAX is not the right
> initialiser for unsigned long values on 32-bit platforms.
> Could we consider using UINT64_MAX from limits.h instead?

UINT64 means it is a 64bit value, while "unsigned long" is either 32-bit,
64bit (or maybe in the future even 128bit?).
Even assigning UINT32_MAX on a 32bit platform might be wrong.
So I think the cast above is probably the best solution.

Helge

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-03  8:52   ` Helge Deller
@ 2019-10-04  9:37     ` Simon Horman
  2019-10-04  9:51       ` Helge Deller
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Horman @ 2019-10-04  9:37 UTC (permalink / raw)
  To: Helge Deller; +Cc: Sven Schnelle, kexec

On Thu, Oct 03, 2019 at 10:52:37AM +0200, Helge Deller wrote:
> On 03.10.19 10:14, Simon Horman wrote:
> > On Tue, Oct 01, 2019 at 05:14:16PM +0200, Helge Deller wrote:
> > > When compiling kexec-tools on a 32-bit platform, assigning an
> > > (unsigned long long) value to an (unsigned long) variable creates
> > > this warning:
> > > 
> > > elf_info.c: In function 'read_phys_offset_elf_kcore':
> > > elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
> > >    805 |  *phys_off = UINT64_MAX;
> > >        |              ^~~~~~~~~~
> > > 
> > > Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.
> > > 
> > > Signed-off-by: Helge Deller <deller@gmx.de>
> > > 
> > > diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
> > > index 2bce5cb..4d16983 100644
> > > --- a/util_lib/elf_info.c
> > > +++ b/util_lib/elf_info.c
> > > @@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
> > >   {
> > >   	int ret;
> > > 
> > > -	*phys_off = UINT64_MAX;
> > > +	*phys_off = (unsigned long) UINT64_MAX;
> > 
> > This seems to mask the problem that UINT64_MAX is not the right
> > initialiser for unsigned long values on 32-bit platforms.
> > Could we consider using UINT64_MAX from limits.h instead?
> 
> UINT64 means it is a 64bit value, while "unsigned long" is either 32-bit,
> 64bit (or maybe in the future even 128bit?).
> Even assigning UINT32_MAX on a 32bit platform might be wrong.
> So I think the cast above is probably the best solution.

Sorry, I made a typo above.
What I meant is, can we consider using ULONG_MAX.

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-04  9:37     ` Simon Horman
@ 2019-10-04  9:51       ` Helge Deller
  2019-10-04 10:14         ` Simon Horman
  0 siblings, 1 reply; 8+ messages in thread
From: Helge Deller @ 2019-10-04  9:51 UTC (permalink / raw)
  To: Simon Horman; +Cc: Sven Schnelle, kexec

On 04.10.19 11:37, Simon Horman wrote:
> On Thu, Oct 03, 2019 at 10:52:37AM +0200, Helge Deller wrote:
>> On 03.10.19 10:14, Simon Horman wrote:
>>> On Tue, Oct 01, 2019 at 05:14:16PM +0200, Helge Deller wrote:
>>>> When compiling kexec-tools on a 32-bit platform, assigning an
>>>> (unsigned long long) value to an (unsigned long) variable creates
>>>> this warning:
>>>>
>>>> elf_info.c: In function 'read_phys_offset_elf_kcore':
>>>> elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
>>>>     805 |  *phys_off = UINT64_MAX;
>>>>         |              ^~~~~~~~~~
>>>>
>>>> Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.
>>>>
>>>> Signed-off-by: Helge Deller <deller@gmx.de>
>>>>
>>>> diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
>>>> index 2bce5cb..4d16983 100644
>>>> --- a/util_lib/elf_info.c
>>>> +++ b/util_lib/elf_info.c
>>>> @@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
>>>>    {
>>>>    	int ret;
>>>>
>>>> -	*phys_off = UINT64_MAX;
>>>> +	*phys_off = (unsigned long) UINT64_MAX;
>>>
>>> This seems to mask the problem that UINT64_MAX is not the right
>>> initialiser for unsigned long values on 32-bit platforms.
>>> Could we consider using UINT64_MAX from limits.h instead?
>>
>> UINT64 means it is a 64bit value, while "unsigned long" is either 32-bit,
>> 64bit (or maybe in the future even 128bit?).
>> Even assigning UINT32_MAX on a 32bit platform might be wrong.
>> So I think the cast above is probably the best solution.
>
> Sorry, I made a typo above.
> What I meant is, can we consider using ULONG_MAX.

Yes, that's probably ok.

Helge

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-04  9:51       ` Helge Deller
@ 2019-10-04 10:14         ` Simon Horman
  2019-10-04 11:01           ` Helge Deller
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Horman @ 2019-10-04 10:14 UTC (permalink / raw)
  To: Helge Deller; +Cc: Sven Schnelle, kexec

On Fri, Oct 04, 2019 at 11:51:05AM +0200, Helge Deller wrote:
> On 04.10.19 11:37, Simon Horman wrote:
> > On Thu, Oct 03, 2019 at 10:52:37AM +0200, Helge Deller wrote:
> > > On 03.10.19 10:14, Simon Horman wrote:
> > > > On Tue, Oct 01, 2019 at 05:14:16PM +0200, Helge Deller wrote:
> > > > > When compiling kexec-tools on a 32-bit platform, assigning an
> > > > > (unsigned long long) value to an (unsigned long) variable creates
> > > > > this warning:
> > > > > 
> > > > > elf_info.c: In function 'read_phys_offset_elf_kcore':
> > > > > elf_info.c:805:14: warning: conversion from 'long long unsigned int' to 'long unsigned int' changes value from '18446744073709551615' to '4294967295'
> > > > >     805 |  *phys_off = UINT64_MAX;
> > > > >         |              ^~~~~~~~~~
> > > > > 
> > > > > Fix it by casting UINT64_MAX to (unsigned long) before storing it to *phys_off.
> > > > > 
> > > > > Signed-off-by: Helge Deller <deller@gmx.de>
> > > > > 
> > > > > diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
> > > > > index 2bce5cb..4d16983 100644
> > > > > --- a/util_lib/elf_info.c
> > > > > +++ b/util_lib/elf_info.c
> > > > > @@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
> > > > >    {
> > > > >    	int ret;
> > > > > 
> > > > > -	*phys_off = UINT64_MAX;
> > > > > +	*phys_off = (unsigned long) UINT64_MAX;
> > > > 
> > > > This seems to mask the problem that UINT64_MAX is not the right
> > > > initialiser for unsigned long values on 32-bit platforms.
> > > > Could we consider using UINT64_MAX from limits.h instead?
> > > 
> > > UINT64 means it is a 64bit value, while "unsigned long" is either 32-bit,
> > > 64bit (or maybe in the future even 128bit?).
> > > Even assigning UINT32_MAX on a 32bit platform might be wrong.
> > > So I think the cast above is probably the best solution.
> > 
> > Sorry, I made a typo above.
> > What I meant is, can we consider using ULONG_MAX.
> 
> Yes, that's probably ok.

Thanks. Will you send an updated patch?

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-04 10:14         ` Simon Horman
@ 2019-10-04 11:01           ` Helge Deller
  2019-10-07  7:12             ` Simon Horman
  0 siblings, 1 reply; 8+ messages in thread
From: Helge Deller @ 2019-10-04 11:01 UTC (permalink / raw)
  To: Simon Horman, kexec; +Cc: Sven Schnelle

When compiling kexec-tools on a 32-bit platform, assigning an
(unsigned long long) value to an (unsigned long) variable creates
this warning:

elf_info.c: In function 'read_phys_offset_elf_kcore':
elf_info.c:805:14: warning: conversion from 'long long unsigned int' to
     'long unsigned int' changes value from '18446744073709551615' to '4294967295'
  805 |  *phys_off = UINT64_MAX;

Fix it by using ULONG_MAX instead of UINT64_MAX.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
index 2bce5cb..7803a94 100644
--- a/util_lib/elf_info.c
+++ b/util_lib/elf_info.c
@@ -802,7 +802,7 @@ int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off)
 {
 	int ret;

-	*phys_off = UINT64_MAX;
+	*phys_off = ULONG_MAX;

 	ret = read_elf(fd);
 	if (!ret) {

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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms
  2019-10-04 11:01           ` Helge Deller
@ 2019-10-07  7:12             ` Simon Horman
  0 siblings, 0 replies; 8+ messages in thread
From: Simon Horman @ 2019-10-07  7:12 UTC (permalink / raw)
  To: Helge Deller; +Cc: Sven Schnelle, kexec

On Fri, Oct 04, 2019 at 01:01:09PM +0200, Helge Deller wrote:
> When compiling kexec-tools on a 32-bit platform, assigning an
> (unsigned long long) value to an (unsigned long) variable creates
> this warning:
> 
> elf_info.c: In function 'read_phys_offset_elf_kcore':
> elf_info.c:805:14: warning: conversion from 'long long unsigned int' to
>      'long unsigned int' changes value from '18446744073709551615' to '4294967295'
>   805 |  *phys_off = UINT64_MAX;
> 
> Fix it by using ULONG_MAX instead of UINT64_MAX.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>

Thanks, applied.

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-10-07  7:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-01 15:14 [PATCH] kexec-tools: Fix conversion overflow when compiling on 32-bit platforms Helge Deller
2019-10-03  8:14 ` Simon Horman
2019-10-03  8:52   ` Helge Deller
2019-10-04  9:37     ` Simon Horman
2019-10-04  9:51       ` Helge Deller
2019-10-04 10:14         ` Simon Horman
2019-10-04 11:01           ` Helge Deller
2019-10-07  7:12             ` Simon Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.