diff options
Diffstat (limited to 'arch/arm64/kernel/ptrace.c')
| -rw-r--r-- | arch/arm64/kernel/ptrace.c | 20 | 
1 files changed, 16 insertions, 4 deletions
diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index 9fde010c945f..fe63ac5e9bf5 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -19,6 +19,7 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ +#include <linux/audit.h>  #include <linux/compat.h>  #include <linux/kernel.h>  #include <linux/sched.h> @@ -39,6 +40,7 @@  #include <asm/compat.h>  #include <asm/debug-monitors.h>  #include <asm/pgtable.h> +#include <asm/syscall.h>  #include <asm/traps.h>  #include <asm/system_misc.h> @@ -85,7 +87,8 @@ static void ptrace_hbptriggered(struct perf_event *bp,  			break;  		}  	} -	for (i = ARM_MAX_BRP; i < ARM_MAX_HBP_SLOTS && !bp; ++i) { + +	for (i = 0; i < ARM_MAX_WRP; ++i) {  		if (current->thread.debug.hbp_watch[i] == bp) {  			info.si_errno = -((i << 1) + 1);  			break; @@ -660,8 +663,10 @@ static int compat_gpr_get(struct task_struct *target,  			kbuf += sizeof(reg);  		} else {  			ret = copy_to_user(ubuf, ®, sizeof(reg)); -			if (ret) +			if (ret) { +				ret = -EFAULT;  				break; +			}  			ubuf += sizeof(reg);  		} @@ -699,8 +704,10 @@ static int compat_gpr_set(struct task_struct *target,  			kbuf += sizeof(reg);  		} else {  			ret = copy_from_user(®, ubuf, sizeof(reg)); -			if (ret) -				return ret; +			if (ret) { +				ret = -EFAULT; +				break; +			}  			ubuf += sizeof(reg);  		} @@ -1113,11 +1120,16 @@ asmlinkage int syscall_trace_enter(struct pt_regs *regs)  	if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))  		trace_sys_enter(regs, regs->syscallno); +	audit_syscall_entry(syscall_get_arch(), regs->syscallno, +		regs->orig_x0, regs->regs[1], regs->regs[2], regs->regs[3]); +  	return regs->syscallno;  }  asmlinkage void syscall_trace_exit(struct pt_regs *regs)  { +	audit_syscall_exit(regs); +  	if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))  		trace_sys_exit(regs, regs_return_value(regs));  | 
