From 8fa852ab6cdf5b1ce141d22c94030e707cc12e78 Mon Sep 17 00:00:00 2001 From: jmallett Date: Sat, 7 Sep 2002 19:12:53 +0000 Subject: 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 --- sys/alpha/alpha/machdep.c | 2 ++ sys/amd64/amd64/machdep.c | 2 ++ sys/i386/i386/machdep.c | 2 ++ sys/ia64/ia64/machdep.c | 2 ++ sys/pc98/i386/machdep.c | 2 ++ sys/pc98/pc98/machdep.c | 2 ++ sys/sparc64/sparc64/machdep.c | 2 ++ 7 files changed, 14 insertions(+) (limited to 'sys') 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; -- cgit v1.1