KASAN issues with idle / hotplug area
From: Andrey Ryabinin <hidden>
Date: 2016-02-18 11:46:30
On 02/18/2016 02:15 PM, Mark Rutland wrote:
On Thu, Feb 18, 2016 at 11:22:24AM +0300, Andrey Ryabinin wrote:quoted
On 02/17/2016 10:16 PM, Mark Rutland wrote:quoted
Looking at the assembly, functions seem to get instrumented regardless of the __no_sanitize_address annotation. The assembly of __invoke_psci_fn_{smc,hvc} look identical, even if one has the annotation and one does not. In the case below, it looks like __invoke_psci_fn_hvc is storing to the shadow area even though it's anotated with __no_sanitize_address. Note that the adrp symbol resolution is bogus; psci_to_linux_errno happens to be at offset 0 in the as-yet unlinked psci.o object....quoted
I also tried using __attribute__((no_sanitize_address)) directly, in case there was some header issue, but that doesn't seem to be the case. I'm using the Linaro 15.08 AArch64 GCC 5.1. Is anyone else able to confirm whether they see the same? Does the same happen for x86?Confirming, this happens on every GCC I have (including x86). It seems that 'no_sanitize_address' in gcc removes only memory access checks but it doesn't remove stack redzones. I think this is wrong, e.g. clang removes instrumentation completely. I'll submit a bug.Ok. Unless there's some clever trickery that we can employ, the above renders the Linux __no_sanitize_address annotation useless for this style of code. We should certianly call that out in the commentary in include/linux/compiler-gcc.h.quoted
But we need fix this in kernel. I see two options here: * completely disable instrumentation for drivers/firmware/psci.cThis is somewhat overkill, and we'd also have to disable instrumentation for arch/arm64/kernel/psci.c (for psci_suspend_finisher). I would like to have instrumentation for everything we can safely instrument. This is probably the least worst option, though.quoted
* get back to assembly implementationWe'd also have to convert psci_suspend_finisher and psci_cpu_suspend, the latter being generic code. That goes against the consolidation we were aiming for.
Yup, I missed these two. In that case the only way is to manually unpoison stack.