• J
    ptrace: Add compat PTRACE_{G, S}ETSIGMASK handlers · 9bcdb3c0
    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 &lt;guohanjun@huawei.com <mailto:guohanjun@huawei.com&gt;>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    9bcdb3c0
ptrace.c 33.7 KB