mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Andy Whitcroft <apw@shadowen.org>
To: akpm@osdl.org, apw@shadowen.org
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC] [PATCH] add TRAP_BAD_SYSCALL_EXITS config for i386
Date: Wed, 7 Jul 2004 14:55:13 +0100	[thread overview]
Message-ID: <200407071355.i67DtDF1019243@voidhawk.shadowen.org> (raw)
In-Reply-To: <20040702163219.7ec698e2.akpm@osdl.org>

> The TRAP_BAD_SYSCALL stuff is actually a bloa^Wfeature which was added
> via the kgdb patch, so it is not in -bk.
> 
> I've never used it, dunno what it does.  I'll roll your two patches into the
> kgdb patches in -mm, thanks.

This adds code to the syscall return path to check that we are
not returning with preempt_count() != 0.  I think that this is a
pretty useful diagnostics tool.  I think that this part should be
split off and considered for inclusion separatly from the GBD part.
It seems that they intended to cause a breakpoint when this occurs.
The small assembly stub combined with something like the patch
below would stand alone.  I've used it as a diagnotics tool.

I could put together a patch to separate this functionality off
from the GDB patches.  If you agree its worthwhile I am happy to
talk to the GDB people about it.

-apw

=== 8< ===
When we detect that a system call has returned with preempt still disabled
report this situation, including the system call number, return value and
preempt value, as well a dropping a register dump.  In the spirit of other
oops handling attempt to recover from it and continue.

Revision: $Rev: 371 $

Signed-off-by: Andy Whitcroft <apw@shadowen.org>

---

diff -X /home/apw/brief/lib/vdiff.excl -rupN reference/arch/i386/kernel/entry.S current/arch/i386/kernel/entry.S
--- reference/arch/i386/kernel/entry.S	2004-07-07 14:34:58.000000000 +0100
+++ current/arch/i386/kernel/entry.S	2004-07-07 14:40:19.000000000 +0100
@@ -317,7 +317,13 @@ restore_all:
 	cmpl $0,TI_preempt_count(%ebp)  # non-zero preempt_count ?
 	jz resume_kernelX
 
-        int $3
+        movl %esp, %ebx			# Record the original register dump
+	movl ORIG_EAX(%esp), %eax	# Recover the return value from syscall
+
+	pushl EAX(%esp)			# Recover the original system call #
+	pushl %eax
+	pushl %ebx
+	call do_bad_syscall_exit
 
 resume_kernelX:
 #endif
diff -X /home/apw/brief/lib/vdiff.excl -rupN reference/arch/i386/kernel/traps.c current/arch/i386/kernel/traps.c
--- reference/arch/i386/kernel/traps.c	2004-07-07 14:34:59.000000000 +0100
+++ current/arch/i386/kernel/traps.c	2004-07-07 14:56:37.000000000 +0100
@@ -874,6 +874,20 @@ asmlinkage void do_spurious_interrupt_bu
 #endif
 }
 
+#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS
+void do_bad_syscall_exit(struct pt_regs *regs, long syscall, long error_code)
+{
+	/*
+	 * Report the preempt count.  Then fix it so we can kill the
+	 * process and continue.  We _may_ get away with it.
+	 */
+	printk("Bad syscall exit - syscall %ld returned %ld preempt %08x\n",
+		syscall, error_code, preempt_count());
+	preempt_count() = 0;
+	die("Bad syscall exit - preempt non-zero", regs, syscall);
+}
+#endif
+
 /*
  *  'math_state_restore()' saves the current math information in the
  * old math state array, and gets the new ones from the current task

      reply	other threads:[~2004-07-07 13:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-02 16:28 Andy Whitcroft
2004-07-02 23:32 ` Andrew Morton
2004-07-07 13:55   ` Andy Whitcroft [this message]

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=200407071355.i67DtDF1019243@voidhawk.shadowen.org \
    --to=apw@shadowen.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®