-
由 James Morse 提交于
hulk inclusion category: feature bugzilla: NA CVE: NA --------------------------- compat_ptrace_request() lacks handlers for PTRACE_{G,S}ETSIGMASK, instead using those in ptrace_request(). The compat variant should read a compat_sigset_t from userspace instead of ptrace_request()s sigset_t. While compat_sigset_t is the same size as sigset_t, it is defined as 2xu32, instead of a single u64. On a big-endian CPU this means that compat_sigset_t is passed to user-space using middle-endianness, where the least-significant u32 is written most significant byte first. If ptrace_request()s code is used userspace will read the most significant u32 where it expected the least significant. Instead of duplicating ptrace_request()s code as a special case in the arch code, handle it here. Fixes: 29000cae ("ptrace: add ability to get/set signal-blocked mask") CC: Andrey Vagin <avagin@openvz.org> Signed-off-by: NJames Morse <james.morse@arm.com> Yury: Replace sigset_{to,from}_compat() with new {get,put}_compat_sigset() Signed-off-by: NYury Norov <ynorov@caviumnetworks.com> Conflicts: kernel/ptrace.c [wangxiongfeng: conflicts because of the following patch commit 4afa2bd35 ptrace: take into account saved_sigmask in PTRACE{GET, SET}SIGMASK Fix it by calling 'clear_tsk_restore_sigmask()' after 'ptrace_setsigmask()'] Signed-off-by: NXiongfeng Wang <wangxiongfeng2@huawei.com> Reviewed-by: NHanjun Guo <guohanjun@huawei.com <mailto:guohanjun@huawei.com>> Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>9bcdb3c0