Blame SOURCES/rhbz1732173.patch

e13ed9
commit 7be7af0fda3633cd19e499617834cf4a5f51dd55
e13ed9
Author: William Cohen <wcohen@redhat.com>
e13ed9
Date:   Tue Jul 23 14:24:14 2019 -0400
e13ed9
e13ed9
    Fix aarch64 to properly access arguments for wrapped syscalls
e13ed9
    
e13ed9
    Linux 4.18 added wrappers for aarch64 syscalls that pass a pointer to
e13ed9
    a struct pt_regs holding the values for the actual arguments.  The
e13ed9
    syscall tapsets initialize CONTEXT->sregs to point at this data
e13ed9
    structure.  However, the aarch64 specific register access code was
e13ed9
    using the CONTEXT->kregs and just getting the processor register state
e13ed9
    when the kprobe triggered rather than the expected arguments in the
e13ed9
    data structure being passed into the syscall.  The aarch64 specific
e13ed9
    register code now gets the syscall arguments from the correct pt_regs
e13ed9
    structure.
e13ed9
e13ed9
diff --git a/tapset/arm64/registers.stp b/tapset/arm64/registers.stp
e13ed9
index b2e5649..8773df2 100644
e13ed9
--- a/tapset/arm64/registers.stp
e13ed9
+++ b/tapset/arm64/registers.stp
e13ed9
@@ -58,7 +58,10 @@ function uarch_bytes:long() {
e13ed9
 function _stp_get_register_by_offset:long (offset:long) %{ /* pure */
e13ed9
 	long value;
e13ed9
 	struct pt_regs *regs;
e13ed9
-	regs = (CONTEXT->user_mode_p ? CONTEXT->uregs : CONTEXT->kregs);
e13ed9
+	if (CONTEXT->sregs)
e13ed9
+	  regs = CONTEXT->sregs;
e13ed9
+	else
e13ed9
+	  regs = (CONTEXT->user_mode_p ? CONTEXT->uregs : CONTEXT->kregs);
e13ed9
 	if (!regs) {
e13ed9
 		CONTEXT->last_error = "No registers available in this context";
e13ed9
 		return;