Subject: kern/23619: panic: gdt_get_slot (ktruss'ing threaded apps panics kernel)
To: None <gnats-bugs@gnats.netbsd.org>
From: Christian Biere <christianbiere@gmx.de>
List: netbsd-bugs
Date: 12/02/2003 04:25:15
>Number:         23619
>Category:       kern
>Synopsis:       panic: gdt_get_slot (ktruss'ing threaded apps panics kernel)
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 02 04:26:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Christian Biere
>Release:        NetBSD 1.6ZF
>Organization:
>Environment:
System: NetBSD cyclonus 1.6ZF NetBSD 1.6ZF (STARSCREAM) #0: Sun Nov 30 01:56:21 CET 2003 bin@cyclonus:/usr/build/obj/sys/arch/i386/compile/STARSCREAM i386
Architecture: i386
Machine: i386
>Description:

I've just noticed that using ktruss with any threaded applications panics
the kernel after a few seconds. This problem must be rather new because
I've used ktruss before for e.g., Mozilla and had no panics.


panic: gdt_get_slot botch 2
Begin traceback...
gdt_get_slot(dbe12ff0,dbdbeb94,dbe0eecc,c01ef156,dbe0f000) at netbsd:gdt_get_slot+0xa6
tss_alloc(dbe0f000,1,2,7,0) at netbsd:tss_alloc+0xa
cpu_lwp_fork(dbdbeb0c,dbdbeb94,0,0,c01ee4b4) at netbsd:cpu_lwp_fork+0x86
newlwp(dbdbeb0c,d3a5ed10,dbe0f000,0,0) at netbsd:newlwp+0xaf
sa_newcachelwp(dbdbeb0c,0,0,dbdbeb0c,d3a5ed10) at netbsd:sa_newcachelwp+0x5a
sa_switchcall(dbdbeb0c,1f,1f,1f,1f) at netbsd:sa_switchcall+0x4a
End traceback...
syncing disks...

panic: gdt_get_slot botch 2
#0  0x00000001 in ?? ()
No symbol table info available.
#1  0xc01e755e in cpu_reboot (howto=197300224, bootstr=0x0)
    at /usr/build/src/sys/arch/i386/i386/machdep.c:769
No locals.
#2  0xc018c51c in panic (
    fmt=0x1000 "\220\214\216\216f1\214f\004f\211f\005P")
    at /usr/build/src/sys/kern/subr_prf.c:242
	bootopt = 197296128
#3  0xc01e679a in gdt_get_slot ()
    at /usr/build/src/sys/arch/i386/i386/gdt.c:248
	slot = -609105104
#4  0xc01e6806 in tss_alloc (pcb=0xdbb6d000)
    at /usr/build/src/sys/arch/i386/i386/gdt.c:281
	slot = -609105104
#5  0xc01ef156 in cpu_lwp_fork (l1=0xdbb1caa8, l2=0xdbb1cb30, stack=0x0, 
    stacksize=0, func=0xc01ee4b4 <child_return>, arg=0xdbb1cb30)
    at /usr/build/src/sys/arch/i386/i386/vm_machdep.c:187
	pcb = (struct pcb *) 0xdbb6d000
	tf = (struct trapframe *) 0xdbb1cb30
	sf = (struct switchframe *) 0xdbb70ff0
#6  0xc0175af7 in newlwp (l1=0xdbb1caa8, p2=0xd39a6cec, uaddr=3686207472, 
    inmem=0, flags=0, stack=0x0, stacksize=0, func=0xc01ee4b4 <child_return>, 
    arg=0x0, rnewlwpp=0xdbb6cf4c) at /usr/build/src/sys/kern/kern_lwp.c:503
	l2 = (struct lwp *) 0xdbb1cb30
	s = 0
#7  0xc017ac2a in sa_newcachelwp (l=0xdbb1caa8)
    at /usr/build/src/sys/kern/kern_sa.c:976
	p = (struct proc *) 0xd39a6cec
	l2 = (struct lwp *) 0xdbb1cb30
	uaddr = 3686191104
	inmem = 0
#8  0xc017ab8a in sa_switchcall (arg=0xdbb1caa8)
    at /usr/build/src/sys/kern/kern_sa.c:953
	l = (struct lwp *) 0xdbb1caa8
	p = (struct proc *) 0x100000
	sa = (struct sadata *) 0xd39ac040
	f = 1048576


     $NetBSD: machdep.c,v 1.543 2003/10/28 22:52:53 mycroft Exp $
     $NetBSD: subr_prf.c,v 1.93 2003/08/07 16:31:53 agc Exp $
     $NetBSD: gdt.c,v 1.30 2003/06/23 11:01:18 martin Exp $
     $NetBSD: vm_machdep.c,v 1.112 2003/10/27 14:11:47 junyoung Exp $
     $NetBSD: kern_lwp.c,v 1.15 2003/11/04 10:33:15 dsl Exp $
     $NetBSD: kern_sa.c,v 1.46 2003/11/28 08:18:03 scw Exp $

>How-To-Repeat:

$ ktruss -dio /tmp/bla.log thread_test
thread 1
thread 1
thread 1
thread 1

*PANIC*

--<cut here>--
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void thread_func(int x)
{
	for (;;) {
		printf("thread %d\n", x);
		sleep(1);
	}
}

int main()
{
	pthread_t t;

	pthread_create(&t, NULL, (void *)thread_func, (void *)1);
	pthread_join(t, NULL);

	return (0);
}
--<cut here>--

Compiled with:
cc -Wall -o thread_test thread_test.c -lpthread

>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: