Thread (12 messages) flat view 12 messages, 4 authors, 2017-11-30

kasan: false use-after-scope warnings with KCOV

From: mark.rutland@arm.com (Mark Rutland)
Date: 2017-11-30 09:30:31
Also in: lkml

On Tue, Nov 28, 2017 at 06:52:32PM +0100, Dmitry Vyukov wrote:
On Tue, Nov 28, 2017 at 4:24 PM, Mark Rutland [off-list ref] wrote:
quoted
quoted
quoted
quoted
As a heads-up, I'm seeing a number of what appear to be false-positive
use-after-scope warnings when I enable both KCOV and KASAN (inline or outline),
when using the Linaro 17.08 GCC7.1.1 for arm64. So far I haven't spotted these
without KCOV selected, and I'm only seeing these for sanitize-use-after-scope.

The reports vary depending on configuration even with the same trigger. I'm not
sure if it's the reporting that's misleading, or whether the detection is going
wrong.
quoted
... it looks suspiciously like something is setting up non-zero shadow
bytes, but not zeroing them upon return.
It looks like this is the case.

The hack below detects leftover poison on an exception return *before*
the false-positive warning (example splat at the end of the email). With
scripts/Makefile.kasan hacked to not pass
-fsanitize-address-use-after-scope, I see no leftover poison.

Unfortunately, there's not enough information left to say where exactly
that happened.

Given the report that Andrey linked to [1], it looks like the compiler
is doing something wrong, and failing to clear some poison in some
cases. Dennis noted [2] that this appears to be the case where inline
functions are called in a loop.

It sounds like this is a general GCC 7.x problem, on both x86_64 and
arm64. As we don't have a smoking gun, it's still possible that
something else is corrupting the shadow, but it seems unlikely.
We use gcc 7.1 extensively on x86_64 and have not seen any problems.
FWIW, it looks like ASAN does go wrong on x86 under some conditions:

https://lkml.kernel.org/r/20171129175430.GA58181 at big-sky.attlocal.net

I note that in all cases reported so far, there's a GCC plugin involved,
so perhaps there's some bad interaction between the compiler passes.

Thanks,
Mark.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help