• Mathieu Desnoyers's avatar
    rseq: Use __u64 for rseq_cs fields, validate user inputs · e96d7135
    Mathieu Desnoyers authored
    Change the rseq ABI so rseq_cs start_ip, post_commit_offset and abort_ip
    fields are seen as 64-bit fields by both 32-bit and 64-bit kernels rather
    that ignoring the 32 upper bits on 32-bit kernels. This ensures we have a
    consistent behavior for a 32-bit binary executed on 32-bit kernels and in
    compat mode on 64-bit kernels.
    
    Validating the value of abort_ip field to be below TASK_SIZE ensures the
    kernel don't return to an invalid address when returning to userspace
    after an abort. I don't fully trust each architecture code to consistently
    deal with invalid return addresses.
    
    Validating the value of the start_ip and post_commit_offset fields
    prevents overflow on arithmetic performed on those values, used to
    check whether abort_ip is within the rseq critical section.
    
    If validation fails, the process is killed with a segmentation fault.
    
    When the signature encountered before abort_ip does not match the expected
    signature, return -EINVAL rather than -EPERM to be consistent with other
    input validation return codes from rseq_get_rseq_cs().
    Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: linux-api@vger.kernel.org
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Dave Watson <davejwatson@fb.com>
    Cc: Paul Turner <pjt@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: "H . Peter Anvin" <hpa@zytor.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Chris Lameter <cl@linux.com>
    Cc: Ben Maurer <bmaurer@fb.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Cc: Joel Fernandes <joelaf@google.com>
    Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Link: https://lkml.kernel.org/r/20180709195155.7654-2-mathieu.desnoyers@efficios.com
    e96d7135
rseq.c 9.89 KB