public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	torvalds@osdl.org, akpm@osdl.org, alan@lxorguk.ukuu.org.uk,
	Jason Baron <jbaron@redhat.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 03/24] make vm86 call audit_syscall_exit
Date: Thu, 27 Apr 2006 17:16:52 -0700	[thread overview]
Message-ID: <20060428001652.GD18750@kroah.com> (raw)
In-Reply-To: <20060428001557.GA18750@kroah.com>

[-- Attachment #1: make-vm86-call-audit_syscall_exit.patch --]
[-- Type: text/plain, Size: 3573 bytes --]

-stable review patch.  If anyone has any objections, please let us know.

------------------
hi,

The motivation behind the patch below was to address messages in
/var/log/messages such as:

Jan 31 10:54:15 mets kernel: audit(:0): major=252 name_count=0: freeing
multiple contexts (1)
Jan 31 10:54:15 mets kernel: audit(:0): major=113 name_count=0: freeing
multiple contexts (2)

I can reproduce by running 'get-edid' from:
http://john.fremlin.de/programs/linux/read-edid/.

These messages come about in the log b/c the vm86 calls do not exit via
the normal system call exit paths and thus do not call
'audit_syscall_exit'. The next system call will then free the context for
itself and for the vm86 context, thus generating the above messages. This
patch addresses the issue by simply adding a call to 'audit_syscall_exit'
from the vm86 code.

Besides fixing the above error messages the patch also now allows vm86
system calls to become auditable. This is useful since strace does not
appear to properly record the return values from sys_vm86.

I think this patch is also a step in the right direction in terms of
cleaning up some core auditing code. If we can correct any other paths
that do not properly call the audit exit and entries points, then we can
also eliminate the notion of context chaining.

I've tested this patch by verifying that the log messages no longer
appear, and that the audit records for sys_vm86 appear to be correct.
Also, 'read_edid' produces itentical output.

thanks,

-Jason

Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
---
 arch/i386/kernel/vm86.c |   12 ++++++++++--
 kernel/auditsc.c        |    5 -----
 2 files changed, 10 insertions(+), 7 deletions(-)

--- linux-2.6.16.11.orig/arch/i386/kernel/vm86.c
+++ linux-2.6.16.11/arch/i386/kernel/vm86.c
@@ -43,6 +43,7 @@
 #include <linux/smp_lock.h>
 #include <linux/highmem.h>
 #include <linux/ptrace.h>
+#include <linux/audit.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -252,6 +253,7 @@ out:
 static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk)
 {
 	struct tss_struct *tss;
+	long eax;
 /*
  * make sure the vm86() system call doesn't try to do anything silly
  */
@@ -305,13 +307,19 @@ static void do_sys_vm86(struct kernel_vm
 	tsk->thread.screen_bitmap = info->screen_bitmap;
 	if (info->flags & VM86_SCREEN_BITMAP)
 		mark_screen_rdonly(tsk->mm);
+	__asm__ __volatile__("xorl %eax,%eax; movl %eax,%fs; movl %eax,%gs\n\t");
+	__asm__ __volatile__("movl %%eax, %0\n" :"=r"(eax));
+
+	/*call audit_syscall_exit since we do not exit via the normal paths */
+	if (unlikely(current->audit_context))
+		audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
+
 	__asm__ __volatile__(
-		"xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs\n\t"
 		"movl %0,%%esp\n\t"
 		"movl %1,%%ebp\n\t"
 		"jmp resume_userspace"
 		: /* no outputs */
-		:"r" (&info->regs), "r" (task_thread_info(tsk)) : "ax");
+		:"r" (&info->regs), "r" (task_thread_info(tsk)));
 	/* we never return here */
 }
 
--- linux-2.6.16.11.orig/kernel/auditsc.c
+++ linux-2.6.16.11/kernel/auditsc.c
@@ -966,11 +966,6 @@ void audit_syscall_entry(struct task_str
 	if (context->in_syscall) {
 		struct audit_context *newctx;
 
-#if defined(__NR_vm86) && defined(__NR_vm86old)
-		/* vm86 mode should only be entered once */
-		if (major == __NR_vm86 || major == __NR_vm86old)
-			return;
-#endif
 #if AUDIT_DEBUG
 		printk(KERN_ERR
 		       "audit(:%d) pid=%d in syscall=%d;"

--

  parent reply	other threads:[~2006-04-28  0:18 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20060428001226.204293000@quad.kroah.org>
2006-04-28  0:15 ` [patch 00/24] -stable review Greg KH
2006-04-28  0:16   ` [patch 01/24] sonypi: correct detection of new ICH7-based laptops Greg KH
2006-04-28  0:16   ` [patch 02/24] cs5535_gpio.c: call cdev_del() during module_exit to unmap kobject references and other cleanups Greg KH
2006-04-28  0:16   ` Greg KH [this message]
2006-04-29 16:34     ` [patch 03/24] make vm86 call audit_syscall_exit Sergey Vlasov
2006-05-01 17:54       ` Jason Baron
2006-04-28  0:17   ` [patch 04/24] x86_64: Pass -32 to the assembler when compiling the 32bit vsyscall pages Greg KH
2006-04-28  0:17   ` [patch 05/24] x86_64: Fix a race in the free_iommu path Greg KH
2006-04-28  0:18   ` [patch 06/24] USB: fix array overrun in drivers/usb/serial/option.c Greg KH
2006-04-28  0:18   ` [patch 07/24] tipar oops fix Greg KH
2006-04-28  0:18   ` [patch 08/24] get_dvb_firmware: download nxt2002 firmware from new driver location Greg KH
2006-04-28  0:18   ` [patch 09/24] for_each_possible_cpu Greg KH
2006-04-28  0:18   ` [patch 10/24] fix saa7129 support in saa7127 module for pvr350 tv out Greg KH
2006-04-28  0:19   ` [patch 11/24] cxusb-bluebird: bug-fix: power down corrupts frontend Greg KH
2006-04-28  0:19   ` [patch 12/24] dm snapshot: fix kcopyd destructor Greg KH
2006-04-28  0:19   ` [patch 13/24] dm flush queue EINTR Greg KH
2006-04-28  0:20   ` [patch 14/24] Simplify proc/devices and fix early termination regression Greg KH
2006-04-28  0:20   ` [patch 15/24] Fix reiserfs deadlock Greg KH
2006-04-28  0:21   ` [patch 16/24] Altix snsc: duplicate kobject fix Greg KH
2006-04-28  0:21   ` [patch 17/24] Alpha: strncpy() fix Greg KH
2006-04-28  0:21   ` [patch 18/24] LSM: add missing hook to do_compat_readv_writev() Greg KH
2006-04-28  0:22   ` [patch 19/24] x86/PAE: Fix pte_clear for the >4GB RAM case Greg KH
2006-04-28  0:22   ` [patch 20/24] NET: e1000: Update truesize with the length of the packet for packet split Greg KH
2006-04-28  0:22   ` [patch 21/24] MIPS: Use "R" constraint for cache_op Greg KH
2006-04-28  0:23   ` [patch 22/24] MIPS: R2 build fixes for gcc < 3.4 Greg KH
2006-04-28  0:23   ` [patch 23/24] MIPS: Fix tx49_blast_icache32_page_indexed Greg KH
2006-04-28  0:24   ` [patch 24/24] MIPS: Fix branch emulation for floating-point exceptions Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060428001652.GD18750@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@osdl.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=jbaron@redhat.com \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@xenotime.net \
    --cc=stable@kernel.org \
    --cc=torvalds@osdl.org \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    --cc=zwane@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox