2019-01-10 05:45:52

by Alexey Kardashevskiy

[permalink] [raw]
Subject: [RFC PATCH kernel] powerpc/stack_protector: Fix external modules building

c3ff2a519 "powerpc/32: add stack protector support" addes stack protector
support so now powerpc's "prepare" target depends on prepare0 (via
stack_protector_prepare target).

It works fine until we try build an external module where it fails with:
Run: 'make -j128 SYSSRC=/home/aik/p/kernel SYSOUT=/home/aik/pbuild/kernel-le-pseries/ ARCH=powerpc'
make[1]: Entering directory '/home/aik/p/kernel'
make[2]: Entering directory '/home/aik/pbuild/kernel-le-pseries'
make[2]: *** No rule to make target 'prepare0', needed by 'stack_protector_prepare'. Stop.

The reason for that is that the main Linux Makefile defines "prepare0"
only if KBUILD_EXTMOD=="".

This hacks powerpc's Makefile to make external modules build again.

Fixes: c3ff2a519 "powerpc/32: add stack protector support"
Signed-off-by: Alexey Kardashevskiy <[email protected]>
---


It has been suggested that there is a better way of fixing this hence RFC.


---
arch/powerpc/Makefile | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 488c9ed..0492f62 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -419,7 +419,11 @@ archheaders:
ifdef CONFIG_STACKPROTECTOR
prepare: stack_protector_prepare

+ifeq ($(KBUILD_EXTMOD),)
stack_protector_prepare: prepare0
+else
+stack_protector_prepare:
+endif
ifdef CONFIG_PPC64
$(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "PACA_CANARY") print $$3;}' include/generated/asm-offsets.h))
else
--
2.17.1



2019-01-11 05:33:45

by Alexey Kardashevskiy

[permalink] [raw]
Subject: Re: [RFC PATCH kernel] powerpc/stack_protector: Fix external modules building



On 11/01/2019 14:08, Masahiro Yamada wrote:
> On Thu, Jan 10, 2019 at 2:44 PM Alexey Kardashevskiy <[email protected]> wrote:
>>
>> c3ff2a519 "powerpc/32: add stack protector support" addes stack protector
>> support so now powerpc's "prepare" target depends on prepare0 (via
>> stack_protector_prepare target).
>>
>> It works fine until we try build an external module where it fails with:
>> Run: 'make -j128 SYSSRC=/home/aik/p/kernel SYSOUT=/home/aik/pbuild/kernel-le-pseries/ ARCH=powerpc'
>> make[1]: Entering directory '/home/aik/p/kernel'
>> make[2]: Entering directory '/home/aik/pbuild/kernel-le-pseries'
>> make[2]: *** No rule to make target 'prepare0', needed by 'stack_protector_prepare'. Stop.
>>
>> The reason for that is that the main Linux Makefile defines "prepare0"
>> only if KBUILD_EXTMOD=="".
>>
>> This hacks powerpc's Makefile to make external modules build again.
>>
>> Fixes: c3ff2a519 "powerpc/32: add stack protector support"
>> Signed-off-by: Alexey Kardashevskiy <[email protected]>
>> ---
>>
>>
>> It has been suggested that there is a better way of fixing this hence RFC.
>>
>>
>> ---
>> arch/powerpc/Makefile | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
>> index 488c9ed..0492f62 100644
>> --- a/arch/powerpc/Makefile
>> +++ b/arch/powerpc/Makefile
>> @@ -419,7 +419,11 @@ archheaders:
>> ifdef CONFIG_STACKPROTECTOR
>> prepare: stack_protector_prepare
>>
>> +ifeq ($(KBUILD_EXTMOD),)
>> stack_protector_prepare: prepare0
>> +else
>> +stack_protector_prepare:
>> +endif
>
>
> Honestly, I think this is ugly.
>
> Do you want me to send an alternative solution?

YES! Thanks :)

>
>
>
>
>> ifdef CONFIG_PPC64
>> $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "PACA_CANARY") print $$3;}' include/generated/asm-offsets.h))
>> else
>> --
>> 2.17.1
>>
>
>

--
Alexey

2019-01-11 05:41:47

by Michael Ellerman

[permalink] [raw]
Subject: Re: [RFC PATCH kernel] powerpc/stack_protector: Fix external modules building

Masahiro Yamada <[email protected]> writes:
> On Thu, Jan 10, 2019 at 2:44 PM Alexey Kardashevskiy <[email protected]> wrote:
...
>> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
>> index 488c9ed..0492f62 100644
>> --- a/arch/powerpc/Makefile
>> +++ b/arch/powerpc/Makefile
>> @@ -419,7 +419,11 @@ archheaders:
>> ifdef CONFIG_STACKPROTECTOR
>> prepare: stack_protector_prepare
>>
>> +ifeq ($(KBUILD_EXTMOD),)
>> stack_protector_prepare: prepare0
>> +else
>> +stack_protector_prepare:
>> +endif
>
>
> Honestly, I think this is ugly.

Yes I would call it a hack :)

> Do you want me to send an alternative solution?

I don't grok how external modules are built well enough to work out what
the right solution is. So if you can come up with something better that
would be awesome.

cheers

2019-01-11 06:32:33

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [RFC PATCH kernel] powerpc/stack_protector: Fix external modules building

On Thu, Jan 10, 2019 at 2:44 PM Alexey Kardashevskiy <[email protected]> wrote:
>
> c3ff2a519 "powerpc/32: add stack protector support" addes stack protector
> support so now powerpc's "prepare" target depends on prepare0 (via
> stack_protector_prepare target).
>
> It works fine until we try build an external module where it fails with:
> Run: 'make -j128 SYSSRC=/home/aik/p/kernel SYSOUT=/home/aik/pbuild/kernel-le-pseries/ ARCH=powerpc'
> make[1]: Entering directory '/home/aik/p/kernel'
> make[2]: Entering directory '/home/aik/pbuild/kernel-le-pseries'
> make[2]: *** No rule to make target 'prepare0', needed by 'stack_protector_prepare'. Stop.
>
> The reason for that is that the main Linux Makefile defines "prepare0"
> only if KBUILD_EXTMOD=="".
>
> This hacks powerpc's Makefile to make external modules build again.
>
> Fixes: c3ff2a519 "powerpc/32: add stack protector support"
> Signed-off-by: Alexey Kardashevskiy <[email protected]>
> ---
>
>
> It has been suggested that there is a better way of fixing this hence RFC.
>
>
> ---
> arch/powerpc/Makefile | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 488c9ed..0492f62 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -419,7 +419,11 @@ archheaders:
> ifdef CONFIG_STACKPROTECTOR
> prepare: stack_protector_prepare
>
> +ifeq ($(KBUILD_EXTMOD),)
> stack_protector_prepare: prepare0
> +else
> +stack_protector_prepare:
> +endif


Honestly, I think this is ugly.

Do you want me to send an alternative solution?




> ifdef CONFIG_PPC64
> $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "PACA_CANARY") print $$3;}' include/generated/asm-offsets.h))
> else
> --
> 2.17.1
>


--
Best Regards
Masahiro Yamada