2018-02-02 15:50:12

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

gcc-8 complains about the prototype for this function:

lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]

This removes the noreturn attribute.

Signed-off-by: Arnd Bergmann <[email protected]>
---
lib/ubsan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/ubsan.c b/lib/ubsan.c
index 59fee96c29a0..aa817d79c47c 100644
--- a/lib/ubsan.c
+++ b/lib/ubsan.c
@@ -427,7 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds);


-void __noreturn
+void
__ubsan_handle_builtin_unreachable(struct unreachable_data *data)
{
unsigned long flags;
--
2.9.0



2018-02-05 09:02:47

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn



On 02/02/2018 06:47 PM, Arnd Bergmann wrote:
> gcc-8 complains about the prototype for this function:
>
> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>

That's actually a bug in GCC. In GCC __ubsan_handle_builtin_unreachable declared
with 'noreturn' and 'const' attributes:

DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
"__ubsan_handle_builtin_unreachable",
BT_FN_VOID_PTR,
ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)


But const attribute doesn't make any sense for function that returns void or doesn't return at all.
Given that gcc-8 has not released yet, it would be better to fix this bug there.

2018-02-05 10:17:31

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

On Mon, Feb 5, 2018 at 10:02 AM, Andrey Ryabinin
<[email protected]> wrote:
>
>
> On 02/02/2018 06:47 PM, Arnd Bergmann wrote:
>> gcc-8 complains about the prototype for this function:
>>
>> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>>
>
> That's actually a bug in GCC. In GCC __ubsan_handle_builtin_unreachable declared
> with 'noreturn' and 'const' attributes:
>
> DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
> "__ubsan_handle_builtin_unreachable",
> BT_FN_VOID_PTR,
> ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)
>
>
> But const attribute doesn't make any sense for function that returns void or doesn't return at all.
> Given that gcc-8 has not released yet, it would be better to fix this bug there.

Ok. Should I open a gcc bug, or will you take care of it?

Arnd

2018-02-05 10:32:43

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn



On 02/05/2018 01:15 PM, Arnd Bergmann wrote:
> On Mon, Feb 5, 2018 at 10:02 AM, Andrey Ryabinin
> <[email protected]> wrote:
>>
>>
>> On 02/02/2018 06:47 PM, Arnd Bergmann wrote:
>>> gcc-8 complains about the prototype for this function:
>>>
>>> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>>>
>>
>> That's actually a bug in GCC. In GCC __ubsan_handle_builtin_unreachable declared
>> with 'noreturn' and 'const' attributes:
>>
>> DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
>> "__ubsan_handle_builtin_unreachable",
>> BT_FN_VOID_PTR,
>> ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)
>>
>>
>> But const attribute doesn't make any sense for function that returns void or doesn't return at all.
>> Given that gcc-8 has not released yet, it would be better to fix this bug there.
>
> Ok. Should I open a gcc bug, or will you take care of it?
>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210

> Arnd
>

2018-11-02 21:28:33

by Olof Johansson

[permalink] [raw]
Subject: Re: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

On Mon, Feb 5, 2018 at 2:31 AM Andrey Ryabinin <[email protected]> wrote:
>
> On 02/05/2018 01:15 PM, Arnd Bergmann wrote:
> > On Mon, Feb 5, 2018 at 10:02 AM, Andrey Ryabinin
> > <[email protected]> wrote:
> >>
> >>
> >> On 02/02/2018 06:47 PM, Arnd Bergmann wrote:
> >>> gcc-8 complains about the prototype for this function:
> >>>
> >>> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
> >>>
> >>
> >> That's actually a bug in GCC. In GCC __ubsan_handle_builtin_unreachable declared
> >> with 'noreturn' and 'const' attributes:
> >>
> >> DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
> >> "__ubsan_handle_builtin_unreachable",
> >> BT_FN_VOID_PTR,
> >> ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)
> >>
> >>
> >> But const attribute doesn't make any sense for function that returns void or doesn't return at all.
> >> Given that gcc-8 has not released yet, it would be better to fix this bug there.
> >
> > Ok. Should I open a gcc bug, or will you take care of it?
> >
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210

8.2.0 still shows this, and there's been no movement on that bug. How
about we pick up this patch until it's been resolved?


-Olof

2018-11-07 14:45:11

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn



On 11/03/2018 12:27 AM, Olof Johansson wrote:
> On Mon, Feb 5, 2018 at 2:31 AM Andrey Ryabinin <[email protected]> wrote:
>>
>> On 02/05/2018 01:15 PM, Arnd Bergmann wrote:
>>> On Mon, Feb 5, 2018 at 10:02 AM, Andrey Ryabinin
>>> <[email protected]> wrote:
>>>>
>>>>
>>>> On 02/02/2018 06:47 PM, Arnd Bergmann wrote:
>>>>> gcc-8 complains about the prototype for this function:
>>>>>
>>>>> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>>>>>
>>>>
>>>> That's actually a bug in GCC. In GCC __ubsan_handle_builtin_unreachable declared
>>>> with 'noreturn' and 'const' attributes:
>>>>
>>>> DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
>>>> "__ubsan_handle_builtin_unreachable",
>>>> BT_FN_VOID_PTR,
>>>> ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)
>>>>
>>>>
>>>> But const attribute doesn't make any sense for function that returns void or doesn't return at all.
>>>> Given that gcc-8 has not released yet, it would be better to fix this bug there.
>>>
>>> Ok. Should I open a gcc bug, or will you take care of it?
>>>
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210
>
> 8.2.0 still shows this, and there's been no movement on that bug. How
> about we pick up this patch until it's been resolved?
>

Sure, I'll add info about GCC bug in changelog and resend the patch.

>
> -Olof
>

2018-11-07 14:47:48

by Andrey Ryabinin

[permalink] [raw]
Subject: [PATCH v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

From: Arnd Bergmann <[email protected]>

gcc-8 complains about the prototype for this function:

lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]

This is actually a GCC's bug. In GCC internals
__ubsan_handle_builtin_unreachable() declared with both 'noreturn' and
'const' attributes instead of only 'noreturn':
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210

Workaround this by removing the noreturn attribute.

[aryabinin: Add information about GCC bug in changelog]
Signed-off-by: Arnd Bergmann <[email protected]>
Signed-off-by: Andrey Ryabinin <[email protected]>
---
lib/ubsan.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/ubsan.c b/lib/ubsan.c
index 59fee96c29a0..e4162f59a81c 100644
--- a/lib/ubsan.c
+++ b/lib/ubsan.c
@@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds);


-void __noreturn
-__ubsan_handle_builtin_unreachable(struct unreachable_data *data)
+void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
{
unsigned long flags;

--
2.18.1


2018-11-07 16:25:19

by Olof Johansson

[permalink] [raw]
Subject: Re: [PATCH v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

On Wed, Nov 7, 2018 at 6:45 AM Andrey Ryabinin <[email protected]> wrote:
>
> From: Arnd Bergmann <[email protected]>
>
> gcc-8 complains about the prototype for this function:
>
> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>
> This is actually a GCC's bug. In GCC internals
> __ubsan_handle_builtin_unreachable() declared with both 'noreturn' and
> 'const' attributes instead of only 'noreturn':
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210
>
> Workaround this by removing the noreturn attribute.
>
> [aryabinin: Add information about GCC bug in changelog]
> Signed-off-by: Arnd Bergmann <[email protected]>
> Signed-off-by: Andrey Ryabinin <[email protected]>

Acked-by: Olof Johansson <[email protected]>

While it's a GCC bug, it's there in official releases now and it makes
warnings noisy so we'd rather silence it.


-Olof

2018-11-07 20:58:02

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

On Wed, 7 Nov 2018 17:45:16 +0300 Andrey Ryabinin <[email protected]> wrote:

> From: Arnd Bergmann <[email protected]>
>
> gcc-8 complains about the prototype for this function:
>
> lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes]
>
> This is actually a GCC's bug. In GCC internals
> __ubsan_handle_builtin_unreachable() declared with both 'noreturn' and
> 'const' attributes instead of only 'noreturn':
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210
>
> Workaround this by removing the noreturn attribute.
>
> ...
>
> --- a/lib/ubsan.c
> +++ b/lib/ubsan.c
> @@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
> EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds);
>
>
> -void __noreturn
> -__ubsan_handle_builtin_unreachable(struct unreachable_data *data)
> +void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
> {
> unsigned long flags;

This code has been here since 2016 and presumably people will want to
build older kernels with newer gcc's. So I'll add cc:stable, OK?


2018-11-07 21:47:05

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

On Wed, Nov 7, 2018 at 9:55 PM Andrew Morton <[email protected]> wrote:
>
> On Wed, 7 Nov 2018 17:45:16 +0300 Andrey Ryabinin <[email protected]> wrote:
>
> > From: Arnd Bergmann <[email protected]>

> > --- a/lib/ubsan.c
> > +++ b/lib/ubsan.c
> > @@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
> > EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds);
> >
> >
> > -void __noreturn
> > -__ubsan_handle_builtin_unreachable(struct unreachable_data *data)
> > +void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
> > {
> > unsigned long flags;
>
> This code has been here since 2016 and presumably people will want to
> build older kernels with newer gcc's. So I'll add cc:stable, OK?
>

Yes, sounds good. Thanks,

arnd