summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjmallett <jmallett@FreeBSD.org>2002-09-07 19:12:53 +0000
committerjmallett <jmallett@FreeBSD.org>2002-09-07 19:12:53 +0000
commit8fa852ab6cdf5b1ce141d22c94030e707cc12e78 (patch)
treefd07f872673ceb4944146509a449b76b745b6460
parentd43e9d766b3d26149431a320d19532c19ad557e0 (diff)
downloadFreeBSD-src-8fa852ab6cdf5b1ce141d22c94030e707cc12e78.zip
FreeBSD-src-8fa852ab6cdf5b1ce141d22c94030e707cc12e78.tar.gz
Fill out two fields (si_pid, si_uid) in the siginfo structure handed back
to userland in the signal handler that were not being iflled out before, but should and can be. This part of sendsig could be slightly refactored to use an MI interface, or ideally, *sendsig*() would have an API change to accept a siginfo_t, which would be filled out by an MI function in the level above sendsig, and said MI function would make a small call into MD code to fill out the MD parts (some of which may be bogus, such as the si_addr stuff in some places). This would eventually make it possible for parts of the kernel sending signals to set up a siginfo with meaningful information. Reviewed by: mux MFC after: 2 weeks
-rw-r--r--sys/alpha/alpha/machdep.c2
-rw-r--r--sys/amd64/amd64/machdep.c2
-rw-r--r--sys/i386/i386/machdep.c2
-rw-r--r--sys/ia64/ia64/machdep.c2
-rw-r--r--sys/pc98/i386/machdep.c2
-rw-r--r--sys/pc98/pc98/machdep.c2
-rw-r--r--sys/sparc64/sparc64/machdep.c2
7 files changed, 14 insertions, 0 deletions
diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c
index b880b3a..cf4cbe8 100644
--- a/sys/alpha/alpha/machdep.c
+++ b/sys/alpha/alpha/machdep.c
@@ -1387,6 +1387,8 @@ sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void*)frame->tf_regs[FRAME_TRAPARG_A0];
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
}
else
frame->tf_regs[FRAME_A1] = code;
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index d106481..c5676b9 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -472,6 +472,8 @@ sendsig(catcher, sig, mask, code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
} else {
/* Old FreeBSD-style arguments. */
sf.sf_siginfo = code;
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index d106481..c5676b9 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -472,6 +472,8 @@ sendsig(catcher, sig, mask, code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
} else {
/* Old FreeBSD-style arguments. */
sf.sf_siginfo = code;
diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c
index 6e4cfb5..cdf8da9 100644
--- a/sys/ia64/ia64/machdep.c
+++ b/sys/ia64/ia64/machdep.c
@@ -935,6 +935,8 @@ sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void*)frame->tf_cr_ifa;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
}
else
frame->tf_r[FRAME_R15] = code;
diff --git a/sys/pc98/i386/machdep.c b/sys/pc98/i386/machdep.c
index c8848a2..c9dc416 100644
--- a/sys/pc98/i386/machdep.c
+++ b/sys/pc98/i386/machdep.c
@@ -492,6 +492,8 @@ sendsig(catcher, sig, mask, code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
} else {
/* Old FreeBSD-style arguments. */
sf.sf_siginfo = code;
diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c
index c8848a2..c9dc416 100644
--- a/sys/pc98/pc98/machdep.c
+++ b/sys/pc98/pc98/machdep.c
@@ -492,6 +492,8 @@ sendsig(catcher, sig, mask, code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
} else {
/* Old FreeBSD-style arguments. */
sf.sf_siginfo = code;
diff --git a/sys/sparc64/sparc64/machdep.c b/sys/sparc64/sparc64/machdep.c
index 39523fe..4edd9df 100644
--- a/sys/sparc64/sparc64/machdep.c
+++ b/sys/sparc64/sparc64/machdep.c
@@ -428,6 +428,8 @@ sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
sf.sf_si.si_signo = sig;
sf.sf_si.si_code = code;
sf.sf_si.si_addr = (void *)tf->tf_sfar;
+ sf.sf_si.si_pid = p->p_pid;
+ sf.sf_si.si_uid = p->p_ucred->cr_uid;
} else {
/* Old FreeBSD-style arguments. */
tf->tf_out[1] = code;
OpenPOWER on IntegriCloud