2014-02-07 17:15:20

by Markos Chandras

[permalink] [raw]
Subject: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

In case the compiler does not support the stack-protector option,
unset the flag to avoid build failures. Printing a warning is enough
to let the user know that this flag will not be used.
Fixes the following build problem when using a toolchain which does
not support the -fstack-protector-strong flag:

Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
-fstack-protector-strong not supported by compiler
mips-linux-gnu-gcc: error: unrecognized command line option
'-fstack-protector-strong'
scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
scripts/Makefile.build:455: recipe for target 'scripts/mod' failed

Cc: Michal Marek <[email protected]>
Cc: [email protected]
Signed-off-by: Markos Chandras <[email protected]>
---
Makefile | 2 ++
1 file changed, 2 insertions(+)

diff --git a/Makefile b/Makefile
index 606ef7c..63a5333 100644
--- a/Makefile
+++ b/Makefile
@@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
ifeq ($(call cc-option, $(stackp-flag)),)
$(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
-fstack-protector not supported by compiler))
+ stackp-flag :=
endif
else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
stackp-flag := -fstack-protector-strong
ifeq ($(call cc-option, $(stackp-flag)),)
$(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
-fstack-protector-strong not supported by compiler)
+ stackp-flag :=
endif
else
# Force off for distro compilers that enable stack protector by default.
--
1.8.5.4


2014-02-13 11:03:46

by Markos Chandras

[permalink] [raw]
Subject: Re: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

On 02/07/2014 05:15 PM, Markos Chandras wrote:
> In case the compiler does not support the stack-protector option,
> unset the flag to avoid build failures. Printing a warning is enough
> to let the user know that this flag will not be used.
> Fixes the following build problem when using a toolchain which does
> not support the -fstack-protector-strong flag:
>
> Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
> -fstack-protector-strong not supported by compiler
> mips-linux-gnu-gcc: error: unrecognized command line option
> '-fstack-protector-strong'
> scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
> make[2]: *** [scripts/mod/empty.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
> scripts/Makefile.build:455: recipe for target 'scripts/mod' failed
>
> Cc: Michal Marek <[email protected]>
> Cc: [email protected]
> Signed-off-by: Markos Chandras <[email protected]>
> ---
> Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 606ef7c..63a5333 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
> ifeq ($(call cc-option, $(stackp-flag)),)
> $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
> -fstack-protector not supported by compiler))
> + stackp-flag :=
> endif
> else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
> stackp-flag := -fstack-protector-strong
> ifeq ($(call cc-option, $(stackp-flag)),)
> $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
> -fstack-protector-strong not supported by compiler)
> + stackp-flag :=
> endif
> else
> # Force off for distro compilers that enable stack protector by default.
>
Hi,

ping?

--
markos

2014-02-20 12:46:03

by Markos Chandras

[permalink] [raw]
Subject: Re: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

On 02/07/2014 05:15 PM, Markos Chandras wrote:
> In case the compiler does not support the stack-protector option,
> unset the flag to avoid build failures. Printing a warning is enough
> to let the user know that this flag will not be used.
> Fixes the following build problem when using a toolchain which does
> not support the -fstack-protector-strong flag:
>
> Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
> -fstack-protector-strong not supported by compiler
> mips-linux-gnu-gcc: error: unrecognized command line option
> '-fstack-protector-strong'
> scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
> make[2]: *** [scripts/mod/empty.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
> scripts/Makefile.build:455: recipe for target 'scripts/mod' failed
>
> Cc: Michal Marek <[email protected]>
> Cc: [email protected]
> Signed-off-by: Markos Chandras <[email protected]>
> ---
> Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 606ef7c..63a5333 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
> ifeq ($(call cc-option, $(stackp-flag)),)
> $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
> -fstack-protector not supported by compiler))
> + stackp-flag :=
> endif
> else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
> stackp-flag := -fstack-protector-strong
> ifeq ($(call cc-option, $(stackp-flag)),)
> $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
> -fstack-protector-strong not supported by compiler)
> + stackp-flag :=
> endif
> else
> # Force off for distro compilers that enable stack protector by default.
>

Ping again?

--
markos

2014-02-20 12:53:44

by Richard Weinberger

[permalink] [raw]
Subject: Re: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

On Thu, Feb 20, 2014 at 1:46 PM, Markos Chandras
<[email protected]> wrote:
> On 02/07/2014 05:15 PM, Markos Chandras wrote:
>>
>> In case the compiler does not support the stack-protector option,
>> unset the flag to avoid build failures. Printing a warning is enough
>> to let the user know that this flag will not be used.
>> Fixes the following build problem when using a toolchain which does
>> not support the -fstack-protector-strong flag:
>>
>> Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
>> -fstack-protector-strong not supported by compiler
>> mips-linux-gnu-gcc: error: unrecognized command line option
>> '-fstack-protector-strong'
>> scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
>> make[2]: *** [scripts/mod/empty.o] Error 1
>> make[2]: *** Waiting for unfinished jobs....
>> scripts/Makefile.build:455: recipe for target 'scripts/mod' failed
>>
>> Cc: Michal Marek <[email protected]>
>> Cc: [email protected]
>> Signed-off-by: Markos Chandras <[email protected]>
>> ---
>> Makefile | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/Makefile b/Makefile
>> index 606ef7c..63a5333 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
>> ifeq ($(call cc-option, $(stackp-flag)),)
>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
>> -fstack-protector not supported by compiler))
>> + stackp-flag :=
>> endif
>> else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
>> stackp-flag := -fstack-protector-strong
>> ifeq ($(call cc-option, $(stackp-flag)),)
>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
>> -fstack-protector-strong not supported by compiler)
>> + stackp-flag :=
>> endif
>> else
>> # Force off for distro compilers that enable stack protector by
>> default.
>>
>
> Ping again?

This is by design. We want the build fail if
CONFIG_CC_STACKPROTECTOR_STRONG is set
but the toolchain does not support it.
Otherwise we could end up with a kernel without stackprotector even if
the config symbol is set.

--
Thanks,
//richard

2014-02-20 13:53:18

by Markos Chandras

[permalink] [raw]
Subject: Re: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

On 02/20/2014 12:53 PM, Richard Weinberger wrote:
> On Thu, Feb 20, 2014 at 1:46 PM, Markos Chandras
> <[email protected]> wrote:
>> On 02/07/2014 05:15 PM, Markos Chandras wrote:
>>>
>>> In case the compiler does not support the stack-protector option,
>>> unset the flag to avoid build failures. Printing a warning is enough
>>> to let the user know that this flag will not be used.
>>> Fixes the following build problem when using a toolchain which does
>>> not support the -fstack-protector-strong flag:
>>>
>>> Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
>>> -fstack-protector-strong not supported by compiler
>>> mips-linux-gnu-gcc: error: unrecognized command line option
>>> '-fstack-protector-strong'
>>> scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
>>> make[2]: *** [scripts/mod/empty.o] Error 1
>>> make[2]: *** Waiting for unfinished jobs....
>>> scripts/Makefile.build:455: recipe for target 'scripts/mod' failed
>>>
>>> Cc: Michal Marek <[email protected]>
>>> Cc: [email protected]
>>> Signed-off-by: Markos Chandras <[email protected]>
>>> ---
>>> Makefile | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/Makefile b/Makefile
>>> index 606ef7c..63a5333 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
>>> ifeq ($(call cc-option, $(stackp-flag)),)
>>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
>>> -fstack-protector not supported by compiler))
>>> + stackp-flag :=
>>> endif
>>> else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
>>> stackp-flag := -fstack-protector-strong
>>> ifeq ($(call cc-option, $(stackp-flag)),)
>>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
>>> -fstack-protector-strong not supported by compiler)
>>> + stackp-flag :=
>>> endif
>>> else
>>> # Force off for distro compilers that enable stack protector by
>>> default.
>>>
>>
>> Ping again?
>
> This is by design. We want the build fail if
> CONFIG_CC_STACKPROTECTOR_STRONG is set
> but the toolchain does not support it.
> Otherwise we could end up with a kernel without stackprotector even if
> the config symbol is set.
>

Hi Richard,

Then maybe the $(warning...) should be converted to $(error...)?
Because it's not really a warning if the build failure is expected to
happen.

--
markos

2014-02-20 13:57:59

by Richard Weinberger

[permalink] [raw]
Subject: Re: [PATCH] Makefile: Unset stack-protector gcc flag if it is not supported

Am 20.02.2014 14:53, schrieb Markos Chandras:
> On 02/20/2014 12:53 PM, Richard Weinberger wrote:
>> On Thu, Feb 20, 2014 at 1:46 PM, Markos Chandras
>> <[email protected]> wrote:
>>> On 02/07/2014 05:15 PM, Markos Chandras wrote:
>>>>
>>>> In case the compiler does not support the stack-protector option,
>>>> unset the flag to avoid build failures. Printing a warning is enough
>>>> to let the user know that this flag will not be used.
>>>> Fixes the following build problem when using a toolchain which does
>>>> not support the -fstack-protector-strong flag:
>>>>
>>>> Makefile:614: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG:
>>>> -fstack-protector-strong not supported by compiler
>>>> mips-linux-gnu-gcc: error: unrecognized command line option
>>>> '-fstack-protector-strong'
>>>> scripts/Makefile.build:308: recipe for target 'scripts/mod/empty.o' failed
>>>> make[2]: *** [scripts/mod/empty.o] Error 1
>>>> make[2]: *** Waiting for unfinished jobs....
>>>> scripts/Makefile.build:455: recipe for target 'scripts/mod' failed
>>>>
>>>> Cc: Michal Marek <[email protected]>
>>>> Cc: [email protected]
>>>> Signed-off-by: Markos Chandras <[email protected]>
>>>> ---
>>>> Makefile | 2 ++
>>>> 1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/Makefile b/Makefile
>>>> index 606ef7c..63a5333 100644
>>>> --- a/Makefile
>>>> +++ b/Makefile
>>>> @@ -607,12 +607,14 @@ ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
>>>> ifeq ($(call cc-option, $(stackp-flag)),)
>>>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
>>>> -fstack-protector not supported by compiler))
>>>> + stackp-flag :=
>>>> endif
>>>> else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
>>>> stackp-flag := -fstack-protector-strong
>>>> ifeq ($(call cc-option, $(stackp-flag)),)
>>>> $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
>>>> -fstack-protector-strong not supported by compiler)
>>>> + stackp-flag :=
>>>> endif
>>>> else
>>>> # Force off for distro compilers that enable stack protector by
>>>> default.
>>>>
>>>
>>> Ping again?
>>
>> This is by design. We want the build fail if
>> CONFIG_CC_STACKPROTECTOR_STRONG is set
>> but the toolchain does not support it.
>> Otherwise we could end up with a kernel without stackprotector even if
>> the config symbol is set.
>>
>
> Hi Richard,
>
> Then maybe the $(warning...) should be converted to $(error...)?
> Because it's not really a warning if the build failure is expected to happen.

No. This would break silentoldconfig.

Thanks,
//richard