2024-01-11 10:55:26

by Naresh Kamboju

[permalink] [raw]
Subject: mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when used here [-Werror,-Wuninitialized]

Following build failures noticed on i386 and x86 with clang builds on the
Linux next-20240111 tag.

Reported-by: Linux Kernel Functional Testing <[email protected]>

Build error:
----------
mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when
used here [-Werror,-Wuninitialized]
4691 | va = __find_vmap_area(addr, &vn->busy.root);
| ^~~~
mm/vmalloc.c:4684:20: note: initialize the variable 'addr' to silence
this warning
4684 | unsigned long addr;
| ^
| = 0
1 error generated.

Links:
- https://qa-reports.linaro.org/lkft/linux-next-master/build/next-20240111/testrun/22036090/suite/build/test/clang-lkftconfig/details/

--
Linaro LKFT
https://lkft.linaro.org


2024-01-11 11:16:47

by Dan Carpenter

[permalink] [raw]
Subject: Re: mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when used here [-Werror,-Wuninitialized]

On Thu, Jan 11, 2024 at 04:23:09PM +0530, Naresh Kamboju wrote:
> Following build failures noticed on i386 and x86 with clang builds on the
> Linux next-20240111 tag.
>
> Reported-by: Linux Kernel Functional Testing <[email protected]>
>
> Build error:
> ----------
> mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when
> used here [-Werror,-Wuninitialized]
> 4691 | va = __find_vmap_area(addr, &vn->busy.root);
> | ^~~~
> mm/vmalloc.c:4684:20: note: initialize the variable 'addr' to silence
> this warning
> 4684 | unsigned long addr;
> | ^
> | = 0
> 1 error generated.

We turned off uninitialized variable warnings for GCC a long time ago...
:/ I don't know if we'll be able to re-enable it in a -Werror world
although Clang seems to be managing alright so perhaps there is hope.

regards,
dan carpenter


2024-01-11 12:56:38

by Arnd Bergmann

[permalink] [raw]
Subject: Re: mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when used here [-Werror,-Wuninitialized]

On Thu, Jan 11, 2024, at 12:16, Dan Carpenter wrote:
> On Thu, Jan 11, 2024 at 04:23:09PM +0530, Naresh Kamboju wrote:
>> Following build failures noticed on i386 and x86 with clang builds on the
>> Linux next-20240111 tag.
>>
>> Reported-by: Linux Kernel Functional Testing <[email protected]>
>>
>> Build error:
>> ----------
>> mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when
>> used here [-Werror,-Wuninitialized]
>> 4691 | va = __find_vmap_area(addr, &vn->busy.root);
>> | ^~~~
>> mm/vmalloc.c:4684:20: note: initialize the variable 'addr' to silence
>> this warning
>> 4684 | unsigned long addr;
>> | ^
>> | = 0
>> 1 error generated.
>
> We turned off uninitialized variable warnings for GCC a long time ago...
> :/ I don't know if we'll be able to re-enable it in a -Werror world
> although Clang seems to be managing alright so perhaps there is hope.

The problem with gcc's warning is that it is non-deterministic and
in recent versions actually got more false-positives even without
-Os or -fsanitize=. Clang does not catch all that gcc does because
it doesn't track state across inline functions, but at least its
output is always the same regardless of optimization and other
options.

At least this particular one is an obvious bug and easily gets
caught by lkft and lkp even if gcc's -Wuninitilized doesn't
flag it.

Arnd

2024-01-12 02:46:56

by Stephen Rothwell

[permalink] [raw]
Subject: Re: mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when used here [-Werror,-Wuninitialized]

Hi all,

On Thu, 11 Jan 2024 17:37:12 +0100 "Arnd Bergmann" <[email protected]> wrote:
>
> On Thu, Jan 11, 2024, at 13:55, Arnd Bergmann wrote:
> > On Thu, Jan 11, 2024, at 12:16, Dan Carpenter wrote:
> >> On Thu, Jan 11, 2024 at 04:23:09PM +0530, Naresh Kamboju wrote:
> >>> Following build failures noticed on i386 and x86 with clang builds on the
> >>> Linux next-20240111 tag.
> >>>
> >>> Reported-by: Linux Kernel Functional Testing <[email protected]>
> >>>
> >>> Build error:
> >>> ----------
> >>> mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when
> >>> used here [-Werror,-Wuninitialized]
> >>> 4691 | va = __find_vmap_area(addr, &vn->busy.root);
> >>> | ^~~~
> >>> mm/vmalloc.c:4684:20: note: initialize the variable 'addr' to silence
> >>> this warning
> >>> 4684 | unsigned long addr;
> >>> | ^
> >>> | = 0
> >>> 1 error generated.
> >>
> >> We turned off uninitialized variable warnings for GCC a long time ago..
> >> :/ I don't know if we'll be able to re-enable it in a -Werror world
> >> although Clang seems to be managing alright so perhaps there is hope.
> >
> > The problem with gcc's warning is that it is non-deterministic and
> > in recent versions actually got more false-positives even without
> > -Os or -fsanitize=. Clang does not catch all that gcc does because
> > it doesn't track state across inline functions, but at least its
> > output is always the same regardless of optimization and other
> > options.
> >
> > At least this particular one is an obvious bug and easily gets
> > caught by lkft and lkp even if gcc's -Wuninitilized doesn't
> > flag it.
>
> As it turns out, gcc did find this one in the default -Wuninitialized
> regardless of -Wmaybe-uninitialized:
>
> mm/vmalloc.c: In function 'vmalloc_dump_obj':
> mm/vmalloc.c:4691:22: error: 'addr' is used uninitialized [-Werror=uninitialized]
> 4691 | va = __find_vmap_area(addr, &vn->busy.root);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> mm/vmalloc.c:4684:23: note: 'addr' was declared here
> 4684 | unsigned long addr;
> | ^~~~
>
> and I see that Uladzislau Rezki already sent a fix, which
> is the same that I tried out in my randconfig tree:
> https://lore.kernel.org/lkml/[email protected]/

I have applied that to linux-next today.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2024-01-12 11:25:02

by Arnd Bergmann

[permalink] [raw]
Subject: Re: mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when used here [-Werror,-Wuninitialized]

On Thu, Jan 11, 2024, at 13:55, Arnd Bergmann wrote:
> On Thu, Jan 11, 2024, at 12:16, Dan Carpenter wrote:
>> On Thu, Jan 11, 2024 at 04:23:09PM +0530, Naresh Kamboju wrote:
>>> Following build failures noticed on i386 and x86 with clang builds on the
>>> Linux next-20240111 tag.
>>>
>>> Reported-by: Linux Kernel Functional Testing <[email protected]>
>>>
>>> Build error:
>>> ----------
>>> mm/vmalloc.c:4691:25: error: variable 'addr' is uninitialized when
>>> used here [-Werror,-Wuninitialized]
>>> 4691 | va = __find_vmap_area(addr, &vn->busy.root);
>>> | ^~~~
>>> mm/vmalloc.c:4684:20: note: initialize the variable 'addr' to silence
>>> this warning
>>> 4684 | unsigned long addr;
>>> | ^
>>> | = 0
>>> 1 error generated.
>>
>> We turned off uninitialized variable warnings for GCC a long time ago...
>> :/ I don't know if we'll be able to re-enable it in a -Werror world
>> although Clang seems to be managing alright so perhaps there is hope.
>
> The problem with gcc's warning is that it is non-deterministic and
> in recent versions actually got more false-positives even without
> -Os or -fsanitize=. Clang does not catch all that gcc does because
> it doesn't track state across inline functions, but at least its
> output is always the same regardless of optimization and other
> options.
>
> At least this particular one is an obvious bug and easily gets
> caught by lkft and lkp even if gcc's -Wuninitilized doesn't
> flag it.

As it turns out, gcc did find this one in the default -Wuninitialized
regardless of -Wmaybe-uninitialized:

mm/vmalloc.c: In function 'vmalloc_dump_obj':
mm/vmalloc.c:4691:22: error: 'addr' is used uninitialized [-Werror=uninitialized]
4691 | va = __find_vmap_area(addr, &vn->busy.root);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/vmalloc.c:4684:23: note: 'addr' was declared here
4684 | unsigned long addr;
| ^~~~

and I see that Uladzislau Rezki already sent a fix, which
is the same that I tried out in my randconfig tree:
https://lore.kernel.org/lkml/[email protected]/

Arnd