• Catalin Marinas's avatar
    arm64: compat Fix siginfo_t -> compat_siginfo_t conversion on big endian · 9d42d48a
    Catalin Marinas authored
    The native (64-bit) sigval_t union contains sival_int (32-bit) and
    sival_ptr (64-bit). When a compat application invokes a syscall that
    takes a sigval_t value (as part of a larger structure, e.g.
    compat_sys_mq_notify, compat_sys_timer_create), the compat_sigval_t
    union is converted to the native sigval_t with sival_int overlapping
    with either the least or the most significant half of sival_ptr,
    depending on endianness. When the corresponding signal is delivered to a
    compat application, on big endian the current (compat_uptr_t)sival_ptr
    cast always returns 0 since sival_int corresponds to the top part of
    sival_ptr. This patch fixes copy_siginfo_to_user32() so that sival_int
    is copied to the compat_siginfo_t structure.
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarBamvor Jian Zhang <bamvor.zhangjian@huawei.com>
    Tested-by: default avatarBamvor Jian Zhang <bamvor.zhangjian@huawei.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
signal32.c 16.5 KB