https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78887

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dodji at gcc dot gnu.org,
                   |                            |dvyukov at gcc dot gnu.org,
                   |                            |kcc at gcc dot gnu.org
          Component|tree-optimization           |sanitizer

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Ah, ok, I'd say this is a kernel bug.
scripts/mod/file2alias.c (handle_moddevtable) has:
        /* All our symbols are of form
<prefix>__mod_<name>__<identifier>_device_table. */
        name = strstr(symname, "__mod_");
so the __odr_asan.__mod_cpu__cpu_feature_match_SHA1_device_table symbol is also
recognized as a device table (which is wrong).
I bet
_GLOBAL__sub_D_65535_0___odr_asan.__mod_cpu__cpu_feature_match_SHA1_device_table
or
_GLOBAL__sub_D_65535_0___mod_cpu__cpu_feature_match_SHA1_device_table
could trigger it too.  Dunno what is the rationale behind accepting <prefix>
there, perhaps accepting only empty prefix or _ prefix would be better.

On the gcc side, we could work around this by adding:
  if (flag_sanitize & SANITIZE_KERNEL_ADDRESS)
    return false;
to asan_needs_odr_indicator_p, that assumes the kernel never wants ODR
verification (as it is written in C, that might be very likely).

Reply via email to