On 8/5/20 11:37 AM, Linus Torvalds wrote:
On Wed, Aug 5, 2020 at 11:24 AM Guenter Roeck linux@roeck-us.net wrote:
Same with older versions of gcc. I don't see the problem with the mainline kernel.
https://www.youtube.com/watch?v=-b5aW08ivHU
I think this is caused by more recursive includes. arch/arm64/include/asm/archrandom.h includes include/linux/random.h which includes arch/arm64/include/asm/archrandom.h to get the definition of arch_get_random_seed_long_early (which it won't get because of the recursion).
What I don't really understand is how this works with new versions of gcc.
Is that the only place it triggers?
Because the trivial fix would be something like the appended, which is the right thing to do anyway.
Correct.
gcc-7.x and older don't support CONFIG_ARM64_PTR_AUTH. Result is that ./arch/arm64/include/asm/pointer_auth.h doesn't include <linux/random.h> for those compiler versions, which results in the problem.
In the mainline kernel, ./arch/arm64/include/asm/pointer_auth.h always includes <linux/random.h>, so the problem isn't seen (or, rather, it is hidden) there.
The problem is caused (exposed) by Marc's commit ("arm64: Workaround circular dependency in pointer_auth.h"), which makes the include of linux/random.h conditional.
Guenter
Linus
diff --git a/arch/arm64/kernel/kaslr.c b/arch/arm64/kernel/kaslr.c index 07c4c8cc4a67..9ded4237e1c1 100644 --- a/arch/arm64/kernel/kaslr.c +++ b/arch/arm64/kernel/kaslr.c @@ -11,8 +11,8 @@ #include <linux/sched.h> #include <linux/types.h> #include <linux/pgtable.h> +#include <linux/random.h>
-#include <asm/archrandom.h> #include <asm/cacheflush.h> #include <asm/fixmap.h> #include <asm/kernel-pgtable.h>