kern/141956: commit references a PR
dfilter service
dfilter at FreeBSD.ORG
Mon Mar 15 15:40:08 UTC 2010
The following reply was made to PR kern/141956; it has been noted by GNATS.
From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/141956: commit references a PR
Date: Mon, 15 Mar 2010 15:33:42 +0000 (UTC)
Author: bruno
Date: Mon Mar 15 15:33:32 2010
New Revision: 205168
URL: http://svn.freebsd.org/changeset/base/205168
Log:
MFC r204519:
Deliver siginfo when signal is generated by thr_kill(2) (SI_USER with properly
filled si_uid and si_pid).
PR: 141956
Modified:
stable/8/sys/kern/kern_thr.c
Modified: stable/8/sys/kern/kern_thr.c
==============================================================================
--- stable/8/sys/kern/kern_thr.c Mon Mar 15 14:20:16 2010 (r205167)
+++ stable/8/sys/kern/kern_thr.c Mon Mar 15 15:33:32 2010 (r205168)
@@ -303,12 +303,18 @@ int
thr_kill(struct thread *td, struct thr_kill_args *uap)
/* long id, int sig */
{
+ ksiginfo_t ksi;
struct thread *ttd;
struct proc *p;
int error;
p = td->td_proc;
error = 0;
+ ksiginfo_init(&ksi);
+ ksi.ksi_signo = uap->sig;
+ ksi.ksi_code = SI_USER;
+ ksi.ksi_pid = p->p_pid;
+ ksi.ksi_uid = td->td_ucred->cr_ruid;
PROC_LOCK(p);
if (uap->id == -1) {
if (uap->sig != 0 && !_SIG_VALID(uap->sig)) {
@@ -320,7 +326,7 @@ thr_kill(struct thread *td, struct thr_k
error = 0;
if (uap->sig == 0)
break;
- tdsignal(p, ttd, uap->sig, NULL);
+ tdsignal(p, ttd, uap->sig, &ksi);
}
}
}
@@ -336,7 +342,7 @@ thr_kill(struct thread *td, struct thr_k
else if (!_SIG_VALID(uap->sig))
error = EINVAL;
else
- tdsignal(p, ttd, uap->sig, NULL);
+ tdsignal(p, ttd, uap->sig, &ksi);
}
PROC_UNLOCK(p);
return (error);
@@ -346,6 +352,7 @@ int
thr_kill2(struct thread *td, struct thr_kill2_args *uap)
/* pid_t pid, long id, int sig */
{
+ ksiginfo_t ksi;
struct thread *ttd;
struct proc *p;
int error;
@@ -362,6 +369,11 @@ thr_kill2(struct thread *td, struct thr_
error = p_cansignal(td, p, uap->sig);
if (error == 0) {
+ ksiginfo_init(&ksi);
+ ksi.ksi_signo = uap->sig;
+ ksi.ksi_code = SI_USER;
+ ksi.ksi_pid = td->td_proc->p_pid;
+ ksi.ksi_uid = td->td_ucred->cr_ruid;
if (uap->id == -1) {
if (uap->sig != 0 && !_SIG_VALID(uap->sig)) {
error = EINVAL;
@@ -372,7 +384,8 @@ thr_kill2(struct thread *td, struct thr_
error = 0;
if (uap->sig == 0)
break;
- tdsignal(p, ttd, uap->sig, NULL);
+ tdsignal(p, ttd, uap->sig,
+ &ksi);
}
}
}
@@ -388,7 +401,7 @@ thr_kill2(struct thread *td, struct thr_
else if (!_SIG_VALID(uap->sig))
error = EINVAL;
else
- tdsignal(p, ttd, uap->sig, NULL);
+ tdsignal(p, ttd, uap->sig, &ksi);
}
}
PROC_UNLOCK(p);
_______________________________________________
svn-src-all at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-bugs
mailing list