kern/84684: [PATCH] Kernel panic in kern_proc.c
Antoine Pelisse
apelisse at gmail.com
Mon Aug 8 20:40:15 GMT 2005
>Number: 84684
>Category: kern
>Synopsis: [PATCH] Kernel panic in kern_proc.c
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Aug 08 20:40:13 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator: Antoine Pelisse
>Release: FreeBSD 7.0-CURRENT i386
>Organization:
Xloling
>Environment:
System: FreeBSD hellmuth.xloling.org 7.0-CURRENT FreeBSD 7.0-CURRENT #21: Mon Aug 8 15:06:49 CEST 2005 i386
>Description:
Fix for kernel panics:
http://people.freebsd.org/~pho/stress/log/cons149.html
http://people.freebsd.org/~pho/stress/log/cons130.html
>How-To-Repeat:
>Fix:
--- sys/kern/kern_proc.c.orig Mon Apr 18 04:10:36 2005
+++ sys/kern/kern_proc.c Mon Aug 8 22:00:27 2005
@@ -868,7 +868,7 @@
{
struct thread *td;
struct kinfo_proc kinfo_proc;
- int error = 0;
+ int error, buffersize = 0;
struct proc *np;
pid_t pid = p->p_pid;
@@ -883,11 +883,23 @@
} else {
_PHOLD(p);
FOREACH_THREAD_IN_PROC(p, td) {
+ buffersize += sizeof(struct kinfo_proc);
+ }
+ PROC_UNLOCK(p);
+
+ buffersize += 5 * sizeof(struct kinfo_proc);
+ error = sysctl_wire_old_buffer(req, buffersize);
+ if (error) {
+ _PRELE(p);
+ return error;
+ }
+
+ PROC_LOCK(p);
+ FOREACH_THREAD_IN_PROC(p, td) {
fill_kinfo_thread(td, &kinfo_proc);
- PROC_UNLOCK(p);
error = SYSCTL_OUT(req, (caddr_t)&kinfo_proc,
sizeof(kinfo_proc));
- PROC_LOCK(p);
+
if (error)
break;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list