• Vincenzo Frascino's avatar
    arm64: vdso: Fix population of AT_SYSINFO_EHDR for compat vdso · 85751e9e
    Vincenzo Frascino authored
    Prior to the introduction of Unified vDSO support and compat layer for
    vDSO on arm64, AT_SYSINFO_EHDR was not defined for compat tasks.
    In the current implementation, AT_SYSINFO_EHDR is defined even if the
    compat vdso layer is not built, which has been shown to break Android
    applications using bionic:
    
     | 01-01 01:22:14.097   755   755 F libc    : Fatal signal 11 (SIGSEGV),
     | code 1 (SEGV_MAPERR), fault addr 0x3cf2c96c in tid 755 (cameraserver),
     | pid 755 (cameraserver)
     | 01-01 01:22:14.112   759   759 F libc    : Fatal signal 11 (SIGSEGV),
     | code 1 (SEGV_MAPERR), fault addr 0x3cf2c96c in tid 759
     | (android.hardwar), pid 759 (android.hardwar)
     | 01-01 01:22:14.120   756   756 F libc    : Fatal signal 11 (SIGSEGV)
     | code 1 (SEGV_MAPERR), fault addr 0x3cf2c96c in tid 756 (drmserver),
     | pid 756 (drmserver)
    
    Restore the old behaviour by making sure that AT_SYSINFO_EHDR for compat
    tasks is defined only when CONFIG_COMPAT_VDSO is enabled.
    Reported-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Tested-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    85751e9e
elf.h 6.18 KB