diff options
author | jeff <jeff@FreeBSD.org> | 2008-03-12 05:01:14 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2008-03-12 05:01:14 +0000 |
commit | e30139dff5b92abb4d81b61ed5003c803b4b72ad (patch) | |
tree | 342401e37df100966bf0c5dfb2f162bf1c44fd66 | |
parent | 84e4492c0b7972744b0b215a731c3cf8da95cc20 (diff) | |
download | FreeBSD-src-e30139dff5b92abb4d81b61ed5003c803b4b72ad.zip FreeBSD-src-e30139dff5b92abb4d81b61ed5003c803b4b72ad.tar.gz |
- 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
-rw-r--r-- | sys/kern/kern_thread.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 8d9f753..43522ef 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) |