diff options
| author | Amy Griffis <amy.griffis@hp.com> | 2005-04-29 11:12:55 -0400 |
|---|---|---|
| committer | <dwmw2@shinybook.infradead.org> | 2005-04-29 11:12:55 -0400 |
| commit | 3ac3ed555bec5b1f92bb22cb94823a0e99d0f320 (patch) | |
| tree | 0133d690f115c47026a316b8b8e2a0a403443d84 | |
| parent | c7fcb0ee74ef4cfdea02befacb55945c93641e44 (diff) | |
[PATCH] fix ia64 syscall auditing
Attached is a patch against David's audit.17 kernel that adds checks
for the TIF_SYSCALL_AUDIT thread flag to the ia64 system call and
signal handling code paths.The patch enables auditing of system
calls set up via fsys_bubble_down, as well as ensuring that
audit_syscall_exit() is called on return from sigreturn.
Neglecting to check for TIF_SYSCALL_AUDIT at these points results in
incorrect information in audit_context, causing frequent system panics
when system call auditing is enabled on an ia64 system.
Signed-off-by: Amy Griffis <amy.griffis@hp.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
| -rw-r--r-- | arch/ia64/kernel/fsys.S | 4 | ||||
| -rw-r--r-- | arch/ia64/kernel/signal.c | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S index 0d8650f7fce7..4f3cdef75797 100644 --- a/arch/ia64/kernel/fsys.S +++ b/arch/ia64/kernel/fsys.S | |||
| @@ -611,8 +611,10 @@ GLOBAL_ENTRY(fsys_bubble_down) | |||
| 611 | movl r2=ia64_ret_from_syscall | 611 | movl r2=ia64_ret_from_syscall |
| 612 | ;; | 612 | ;; |
| 613 | mov rp=r2 // set the real return addr | 613 | mov rp=r2 // set the real return addr |
| 614 | tbit.z p8,p0=r3,TIF_SYSCALL_TRACE | 614 | and r3=_TIF_SYSCALL_TRACEAUDIT,r3 |
| 615 | ;; | 615 | ;; |
| 616 | cmp.eq p8,p0=r3,r0 | ||
| 617 | |||
| 616 | (p10) br.cond.spnt.many ia64_ret_from_syscall // p10==true means out registers are more than 8 | 618 | (p10) br.cond.spnt.many ia64_ret_from_syscall // p10==true means out registers are more than 8 |
| 617 | (p8) br.call.sptk.many b6=b6 // ignore this return addr | 619 | (p8) br.call.sptk.many b6=b6 // ignore this return addr |
| 618 | br.cond.sptk ia64_trace_syscall | 620 | br.cond.sptk ia64_trace_syscall |
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c index 6891d86937d9..645557418725 100644 --- a/arch/ia64/kernel/signal.c +++ b/arch/ia64/kernel/signal.c | |||
| @@ -224,7 +224,8 @@ ia64_rt_sigreturn (struct sigscratch *scr) | |||
| 224 | * could be corrupted. | 224 | * could be corrupted. |
| 225 | */ | 225 | */ |
| 226 | retval = (long) &ia64_leave_kernel; | 226 | retval = (long) &ia64_leave_kernel; |
| 227 | if (test_thread_flag(TIF_SYSCALL_TRACE)) | 227 | if (test_thread_flag(TIF_SYSCALL_TRACE) |
| 228 | || test_thread_flag(TIF_SYSCALL_AUDIT)) | ||
| 228 | /* | 229 | /* |
| 229 | * strace expects to be notified after sigreturn returns even though the | 230 | * strace expects to be notified after sigreturn returns even though the |
| 230 | * context to which we return may not be in the middle of a syscall. | 231 | * context to which we return may not be in the middle of a syscall. |
