aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2008-03-12 05:01:14 +0000
committerJeff Roberson <jeff@FreeBSD.org>2008-03-12 05:01:14 +0000
commitbdb5bdf0b7eb04a7a2f2a6b6bf0f60afaa812f1d (patch)
tree342401e37df100966bf0c5dfb2f162bf1c44fd66
parent0b4793efb7311d8a13354b710f7544d035fe537b (diff)
downloadsrc-bdb5bdf0b7eb04a7a2f2a6b6bf0f60afaa812f1d.tar.gz
src-bdb5bdf0b7eb04a7a2f2a6b6bf0f60afaa812f1d.zip
- KSE may free a thread that was never actually forked. This will leave
td_cpuset NULL. Check for this condition before dereferencing the cpuset. Reported by: david@catwhisker.org, miwi@freebsd.org Sponsored by: Nokia
Notes
Notes: svn path=/head/; revision=177083
-rw-r--r--sys/kern/kern_thread.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 8d9f75320a4f..43522ef7649d 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -343,7 +343,12 @@ thread_alloc(void)
void
thread_free(struct thread *td)
{
+#ifdef KSE
+ if (td->td_cpuset != NULL)
+ cpuset_rel(td->td_cpuset);
+#else
cpuset_rel(td->td_cpuset);
+#endif
td->td_cpuset = NULL;
cpu_thread_free(td);
if (td->td_altkstack != 0)