The asm audit optimizations are ugly and obfuscate the code too
much.  Remove them.

This will regress performance if syscall auditing is enabled on
32-bit kernels and sysenter is in use.  If this becomes a problem,
interested parties are encouraged to implement the equivalent of the
64-bit opportunistic sysret optimization.

Alternatively, a case could be made that, on 32-bit kernels, a less
messy asm audit optimization could be done.  32-bit kernels don't have
the complicated partial register saving tricks that 64-bit kernels
have, so the sysenter post-syscall path could just call the audit
hooks directly.  Any reimplementation of this ought to demonstrate
that it only calls the audit hook once per syscall, though, which does
not currently appear to be true.  Someone would have to make the case
that doing so would be better than implementing opportunistic sysexit,
though.

Signed-off-by: Andy Lutomirski <[email protected]>
---
 arch/x86/entry/entry_32.S | 48 ++---------------------------------------------
 1 file changed, 2 insertions(+), 46 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 21dc60a60b5f..90f9e7f6c15e 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -45,16 +45,6 @@
 #include <asm/asm.h>
 #include <asm/smap.h>
 
-/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this.  */
-#include <linux/elf-em.h>
-#define AUDIT_ARCH_I386                (EM_386|__AUDIT_ARCH_LE)
-#define __AUDIT_ARCH_LE                0x40000000
-
-#ifndef CONFIG_AUDITSYSCALL
-# define sysenter_audit                syscall_trace_entry
-# define sysexit_audit         syscall_exit_work
-#endif
-
        .section .entry.text, "ax"
 
 /*
@@ -339,7 +329,7 @@ sysenter_past_esp:
        GET_THREAD_INFO(%ebp)
 
        testl   $_TIF_WORK_SYSCALL_ENTRY, TI_flags(%ebp)
-       jnz     sysenter_audit
+       jnz     syscall_trace_entry
 sysenter_do_call:
        cmpl    $(NR_syscalls), %eax
        jae     sysenter_badsys
@@ -351,7 +341,7 @@ sysenter_after_call:
        TRACE_IRQS_OFF
        movl    TI_flags(%ebp), %ecx
        testl   $_TIF_ALLWORK_MASK, %ecx
-       jnz     sysexit_audit
+       jnz     syscall_exit_work
 sysenter_exit:
 /* if something modifies registers it must also disable sysexit */
        movl    PT_EIP(%esp), %edx
@@ -362,40 +352,6 @@ sysenter_exit:
        PTGS_TO_GS
        ENABLE_INTERRUPTS_SYSEXIT
 
-#ifdef CONFIG_AUDITSYSCALL
-sysenter_audit:
-       testl   $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT), TI_flags(%ebp)
-       jnz     syscall_trace_entry
-       /* movl PT_EAX(%esp), %eax already set, syscall number: 1st arg to 
audit */
-       movl    PT_EBX(%esp), %edx              /* ebx/a0: 2nd arg to audit */
-       /* movl PT_ECX(%esp), %ecx already set, a1: 3nd arg to audit */
-       pushl   PT_ESI(%esp)                    /* a3: 5th arg */
-       pushl   PT_EDX+4(%esp)                  /* a2: 4th arg */
-       call    __audit_syscall_entry
-       popl    %ecx                            /* get that remapped edx off 
the stack */
-       popl    %ecx                            /* get that remapped esi off 
the stack */
-       movl    PT_EAX(%esp), %eax              /* reload syscall number */
-       jmp     sysenter_do_call
-
-sysexit_audit:
-       testl   $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), %ecx
-       jnz     syscall_exit_work
-       TRACE_IRQS_ON
-       ENABLE_INTERRUPTS(CLBR_ANY)
-       movl    %eax, %edx                      /* second arg, syscall return 
value */
-       cmpl    $-MAX_ERRNO, %eax               /* is it an error ? */
-       setbe %al                               /* 1 if so, 0 if not */
-       movzbl %al, %eax                        /* zero-extend that */
-       call    __audit_syscall_exit
-       DISABLE_INTERRUPTS(CLBR_ANY)
-       TRACE_IRQS_OFF
-       movl    TI_flags(%ebp), %ecx
-       testl   $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), %ecx
-       jnz     syscall_exit_work
-       movl    PT_EAX(%esp), %eax              /* reload syscall return value 
*/
-       jmp     sysenter_exit
-#endif
-
 .pushsection .fixup, "ax"
 2:     movl    $0, PT_FS(%esp)
        jmp     1b
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to