On Fri, 27 Nov 2020 at 19:46, Matthew Malcomson
<matthew.malcom...@arm.com> wrote:
>
> Hello,
>
> -----
>
> This test should ensure that we can compile with hwasan, that such a compiled
> binary runs as expected, *and* that we're running on a kernel which implements
> the capability to ignore the top bytes of pointers in syscalls.
>
> It was expected that a basic test of `int main(void) { return 0; }` would 
> check
> this, since there is a check called during `__hwasan_init` in libhwasan to
> ensure that the kernel we're running on provides a `prctl` to request the
> relaxed ABI.
>
> Unfortunately, the check in libhwasan has a bug in it, and does not correctly
> fail when the kernel feature is not around.  This means that check is not
> automatically provided by the runtime.
>
> The sanitizer runtime will be fixed but would like to install this fix here in
> case fixing the library is not quick enough for the release (and so that 
> people
> running the testsuite do not see spurious errors in the meantime).
>
> Tested by running testsuite on an AArch64 machine with and without the 
> required
> kernel.
> Observed that the test does indeed fail when the kernel feature is unavailable
> and pass when the feature is available.
>
> Note that this test is directly targetting AArch64 by using `prctl` numbers
> specific to it.  That's unfortunate, but once the runtime fix has gone in we
> will be able to remove that requirement.
>
> Ok for trunk?
>
> gcc/testsuite/ChangeLog:
>
>         * lib/hwasan-dg.exp (check_effective_target_hwaddress_exec): Fix
>         check for correct kernel version.
>

Hi Matthew,

Thanks for the patch: I could test it in my validation environment and it makes
the offending tests unsupported, which will prevent spurious regression reports.

Thanks

Christophe

>
>
> ###############     Attachment also inlined for ease of reply    
> ###############
>
>
> diff --git a/gcc/testsuite/lib/hwasan-dg.exp b/gcc/testsuite/lib/hwasan-dg.exp
> index 
> 892f2bab43325e830b5d9243377c70e074cdfe40..bd2a011947f9d3384ee32ffa9996a49429256af2
>  100644
> --- a/gcc/testsuite/lib/hwasan-dg.exp
> +++ b/gcc/testsuite/lib/hwasan-dg.exp
> @@ -41,7 +41,24 @@ proc check_effective_target_fsanitize_hwaddress {} {
>
>  proc check_effective_target_hwaddress_exec {} {
>      if ![check_runtime hwaddress_exec {
> -       int main (void) { return 0; }
> +       #ifdef __cplusplus
> +       extern "C" {
> +       #endif
> +       extern int prctl(int, unsigned long, unsigned long, unsigned long, 
> unsigned long);
> +       #ifdef __cplusplus
> +       }
> +       #endif
> +       int main (void) {
> +       #define PR_SET_TAGGED_ADDR_CTRL 55
> +       #define PR_GET_TAGGED_ADDR_CTRL 56
> +       #define PR_TAGGED_ADDR_ENABLE (1UL << 0)
> +         if (prctl (PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0) == -1)
> +           return 1;
> +         if (prctl(PR_SET_TAGGED_ADDR_CTRL, PR_TAGGED_ADDR_ENABLE, 0, 0, 0) 
> == -1
> +             || !prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0))
> +           return 1;
> +         return 0;
> +       }
>      }] {
>         return 0;
>      }
>

Reply via email to