Re: [PATCHv3 0/2] Stackleak for arm64

From: Laura Abbott
Date: Wed Jul 25 2018 - 18:06:06 EST


On 07/25/2018 04:49 AM, Will Deacon wrote:
Hi Laura,

On Tue, Jul 24, 2018 at 05:38:07PM +0100, Will Deacon wrote:
On Fri, Jul 20, 2018 at 02:41:52PM -0700, Laura Abbott wrote:
This is the version of stackleak for arm64, hopefully ready for queueing

Thanks. I'll push these into linux-next tomorrow, once I've had a chance
to test my conflict resolution in entry.S.

I've run into a couple of issues with this series:

1. I had to install libmpc-dev to get GCC_PLUGINS to appear, otherwise the
hostcc check would silently fail. I guess that's a general observation,
but it might be nice to print a message about the missing dependencies.

2. It breaks arm64 allmodconfig build. Log below.

Please can you take a look at the build failure? Otherwise, the patches
look good to me.

Cheers,

Will

--->8

arch/arm64/kernel/sdei.c: In function âon_sdei_normal_stackâ:
arch/arm64/kernel/sdei.c:101:7: error: dereferencing pointer to incomplete type âstruct stack_infoâ
info->low = low;
^~
arch/arm64/kernel/sdei.c:103:16: error: âSTACK_TYPE_SDEI_NORMALâ undeclared (first use in this function); did you mean âSCHED_NORMALâ?
info->type = STACK_TYPE_SDEI_NORMAL;
^~~~~~~~~~~~~~~~~~~~~~
SCHED_NORMAL
arch/arm64/kernel/sdei.c:103:16: note: each undeclared identifier is reported only once for each function it appears in
arch/arm64/kernel/sdei.c: In function âon_sdei_critical_stackâ:
arch/arm64/kernel/sdei.c:121:16: error: âSTACK_TYPE_SDEI_CRITICALâ undeclared (first use in this function)
info->type = STACK_TYPE_SDEI_CRITICAL;
^~~~~~~~~~~~~~~~~~~~~~~~
arch/arm64/kernel/sdei.c: At top level:
arch/arm64/kernel/sdei.c:127:6: error: conflicting types for â_on_sdei_stackâ
bool _on_sdei_stack(unsigned long sp,
^~~~~~~~~~~~~~
In file included from ./include/linux/arm_sdei.h:14:0,
from arch/arm64/kernel/sdei.c:5:
./arch/arm64/include/asm/sdei.h:45:6: note: previous declaration of â_on_sdei_stackâ was here
bool _on_sdei_stack(unsigned long sp, struct stack_info *info);
^~~~~~~~~~~~~~
arch/arm64/kernel/sdei.c: In function â_on_sdei_stackâ:
arch/arm64/kernel/sdei.c:136:33: error: âinfoâ undeclared (first use in this function); did you mean âintâ?
if (on_sdei_critical_stack(sp, info))
^~~~
int
arch/arm64/kernel/sdei.c:131:21: warning: unused variable âhighâ [-Wunused-variable]
unsigned long low, high;
^~~~
arch/arm64/kernel/sdei.c:131:16: warning: unused variable âlowâ [-Wunused-variable]
unsigned long low, high;
^~~
make[1]: *** [arch/arm64/kernel/sdei.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [arch/arm64/kernel] Error 2


Ugh this was a failure that I missed folding in, sorry about that

--- 8< ----

diff --git a/arch/arm64/kernel/sdei.c b/arch/arm64/kernel/sdei.c
index 7154fee1cb2b..a94a868f0532 100644
--- a/arch/arm64/kernel/sdei.c
+++ b/arch/arm64/kernel/sdei.c
@@ -13,6 +13,7 @@
#include <asm/mmu.h>
#include <asm/ptrace.h>
#include <asm/sections.h>
+#include <asm/stacktrace.h>
#include <asm/sysreg.h>
#include <asm/vmap_stack.h>
@@ -125,11 +126,8 @@ bool on_sdei_critical_stack(unsigned long sp,
}
bool _on_sdei_stack(unsigned long sp,
- unsigned long *stack_low,
- unsigned long *stack_high)
+ struct stack_info *info)
{
- unsigned long low, high;
-
if (!IS_ENABLED(CONFIG_VMAP_STACK))
return false;