diff options
author | jmallett <jmallett@FreeBSD.org> | 2002-09-07 19:12:53 +0000 |
---|---|---|
committer | jmallett <jmallett@FreeBSD.org> | 2002-09-07 19:12:53 +0000 |
commit | 8fa852ab6cdf5b1ce141d22c94030e707cc12e78 (patch) | |
tree | fd07f872673ceb4944146509a449b76b745b6460 /sys | |
parent | d43e9d766b3d26149431a320d19532c19ad557e0 (diff) | |
download | FreeBSD-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
Diffstat (limited to 'sys')
-rw-r--r-- | sys/alpha/alpha/machdep.c | 2 | ||||
-rw-r--r-- | sys/amd64/amd64/machdep.c | 2 | ||||
-rw-r--r-- | sys/i386/i386/machdep.c | 2 | ||||
-rw-r--r-- | sys/ia64/ia64/machdep.c | 2 | ||||
-rw-r--r-- | sys/pc98/i386/machdep.c | 2 | ||||
-rw-r--r-- | sys/pc98/pc98/machdep.c | 2 | ||||
-rw-r--r-- | sys/sparc64/sparc64/machdep.c | 2 |
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; |