PERFORCE change 32829 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sun Jun 8 18:27:54 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=32829
Change 32829 by marcel at marcel_nfs on 2003/06/08 18:27:02
Avoid the possibility that we're trying to send a signal to
the process as the result of a fault in the gateway page.
If this happens, the fault happens either in epc_sigtramp()
or break_sigtramp() and generally means that the register
stack space is exhausted or the backing store pointer is
invalid. Either way, the fault got triggered while sending
a signal to the process and sending a signal to the process
because of that is bound to cause exactly the same: a fault,
followed by a signal, followed by a fault followed by nausea.
Keep a debug printf() in here so that we'll know if and when
this kicks in.
Affected files ...
.. //depot/projects/ia64/sys/ia64/ia64/machdep.c#77 edit
Differences ...
==== //depot/projects/ia64/sys/ia64/ia64/machdep.c#77 (text+ko) ====
@@ -831,11 +831,26 @@
int oonstack;
td = curthread;
+ tf = td->td_frame;
+
+ /*
+ * Bail out if we're sending a signal due to a fault in the gateway
+ * page. If that happens, we were trying to send a signal but the
+ * backing store address was invalid. Trying to send a signal in that
+ * case will not work.
+ * Note that the test for region 5 is a bit sloppy, but does not
+ * give false positives.
+ */
+ if ((tf->tf_special.iip >> 61) == 5) {
+ printf("XXX: Fault in gateway page. Cannot send signal.\n");
+ sigexit(td, SIGSEGV);
+ return;
+ }
+
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
mtx_assert(&psp->ps_mtx, MA_OWNED);
- tf = td->td_frame;
sp = tf->tf_special.sp;
oonstack = sigonstack(sp);
sbs = 0;
More information about the p4-projects
mailing list