Skip Menu |
 

Download (untitled) / with headers
text/plain 5.4KiB
From krb5-bugs-incoming-bounces@PCH.mit.edu Mon Jun 6 15:57:53 2005
Received: from pch.mit.edu (PCH.MIT.EDU [18.7.21.90]) by krbdev.mit.edu (8.9.3p2) with ESMTP
id PAA07474; Mon, 6 Jun 2005 15:57:53 -0400 (EDT)
Received: from pch.mit.edu (pch.mit.edu [127.0.0.1])
by pch.mit.edu (8.12.8p2/8.12.8) with ESMTP id j56JvKWn013471
for <krb5-send-pr@krbdev.mit.edu>; Mon, 6 Jun 2005 15:57:20 -0400
Received: from pacific-carrier-annex.mit.edu (PACIFIC-CARRIER-ANNEX.MIT.EDU
[18.7.21.83])
by pch.mit.edu (8.12.8p2/8.12.8) with ESMTP id j56GEGWn013208
for <krb5-bugs-incoming@PCH.mit.edu>; Mon, 6 Jun 2005 12:14:16 -0400
Received: from coppi.bath.ac.uk (coppi.bath.ac.uk [138.38.32.23])
j56GCCOq029684
for <krb5-bugs@mit.edu>; Mon, 6 Jun 2005 12:12:12 -0400 (EDT)
Received: from ccsdhd by coppi.bath.ac.uk with local id 1DfKCx-0005Od-Fx;
Mon, 06 Jun 2005 17:12:11 +0100
To: krb5-bugs@mit.edu
From: Dennis Davis <D.H.Davis@bath.ac.uk>
X-send-pr-version: 3.99
Message-Id: <E1DfKCx-0005Od-Fx@coppi.bath.ac.uk>
Date: Mon, 06 Jun 2005 17:12:11 +0100
X-Spam-Score: -2.599
X-Spam-Flag: NO
X-Scanned-By: MIMEDefang 2.42
X-Mailman-Approved-At: Mon, 06 Jun 2005 15:57:18 -0400
cc: Dennis Davis <d.h.davis@bath.ac.uk>
Subject: Double free problems with libcom_err.
X-BeenThere: krb5-bugs-incoming@mailman.mit.edu
X-Mailman-Version: 2.1
Precedence: list
Reply-To: Dennis Davis <D.H.Davis@bath.ac.uk>
Sender: krb5-bugs-incoming-bounces@PCH.mit.edu
Errors-To: krb5-bugs-incoming-bounces@PCH.mit.edu


Show quoted text
>Submitter-Id: net
>Originator: Dennis Davis
>Organization:
University of Bath
Show quoted text
>Confidential:
no
Show quoted text
>Synopsis:
I see double free problems in libcom_err
Show quoted text
>Severity:
non-critical
Show quoted text
>Priority:
medium
Show quoted text
>Category:
krb5-libs
Show quoted text
>Class:
sw-bug
Show quoted text
>Release: 1.4.1
>Environment:

Machine: anquetil.bath.ac.uk
os: OpenBSD3.7
Target: Working build of krb5-1.4.1
System: OpenBSD anquetil.bath.ac.uk 3.7 EXIM_SERVER#0 i386


Show quoted text
>Description:

I've configured and built krb5-1.4.1 with:

LDFLAGS=-lpthread \
CC=cc CFLAGS="-O2 -g -fPIC" \
./configure --prefix=/kerberosV \
--enable-dns-for-realm --with-krb4 \
--with-tcl=/usr/local --disable-shared \
--enable-static --disable-ipv6 \
--enable-thread-support

Running kinit, klist, kadmin, telnet etc all produce messages
similar to:

klist in free(): error: chunk is already free
Abort trap

Turning the abort into a warning gives:

anquetil.bath.ac.uk ?// MALLOC_OPTIONS=a /kerberosV/bin/klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_526)


Kerberos 4 ticket cache: /tmp/tkt526
klist: You have no tickets cached
klist in free(): warning: chunk is already free
klist in free(): warning: chunk is already free
klist in free(): warning: chunk is already free
klist in free(): warning: chunk is already free
klist in free(): warning: chunk is already free
klist in free(): warning: chunk is already free
anquetil.bath.ac.uk ?//

Note that the command always seems to work OK and the error seems to
occur as part of the cleanup before the command exits. This is most
noticable with the telnet command. The failure occurs after the
connection to the remote site has been closed.

Running a simple program under gdb gives:


a.out in free(): error: chunk is already free

Program received signal SIGABRT, Aborted.
0x0e16b71d in kill () from /usr/lib/libc.so.34.2
(gdb) bt
#0 0x0e16b71d in kill () from /usr/lib/libc.so.34.2
#1 0x0e19830f in abort () from /usr/lib/libc.so.34.2
#2 0x0e16fb71 in execve () from /usr/lib/libc.so.34.2
#3 0x00000002 in ?? ()
#4 0xcfbf82bc in ?? ()
#5 0x00000004 in ?? ()
#6 0x0a680027 in fsync () from /usr/lib/libpthread.so.6.1
#7 0x0e16fc1f in execve () from /usr/lib/libc.so.34.2
#8 0x2e126f80 in _des_bits8 () from /usr/lib/libc.so.34.2
#9 0x2e130ec8 in optopt () from /usr/lib/libc.so.34.2
#10 0xcfbf8334 in ?? ()
#11 0x0e16fb82 in execve () from /usr/lib/libc.so.34.2
#12 0xcfbf8324 in ?? ()
#13 0x0e156e44 in __errno () from /usr/lib/libc.so.34.2
#14 0x0e17072c in execve () from /usr/lib/libc.so.34.2
#15 0x2e126f80 in _des_bits8 () from /usr/lib/libc.so.34.2
#16 0x0000000f in ?? ()
#17 0x3c018000 in ?? ()
#18 0x0e1706c1 in execve () from /usr/lib/libc.so.34.2
#19 0x00000000 in ?? ()
#20 0x2e133f1c in ?? () from /usr/lib/libc.so.34.2
#21 0xcfbf83a4 in ?? ()
#22 0x0e1708a9 in free () from /usr/lib/libc.so.34.2
#23 0x0e1708a9 in free () from /usr/lib/libc.so.34.2
#24 0x1c05d9b7 in remove_error_table (et=0x3c0110e0) at error_message.c:340
#25 0x1c0240e3 in profile_library_finalizer () at prof_file.c:63
#26 0x1c0027c8 in __register_frame_info ()
#27 0x1c05eb85 in __fini ()
#28 0x0e17116a in exit () from /usr/lib/libc.so.34.2
#29 0x1c002759 in ___start ()
#30 0x1c0026bf in _start ()

So the problem appears to be in lines 334 to 342 of
utils/et/error_message.c:

334 /* Remove the first occurrance we can find. Prefer dynamic
335 entries, but if there are none, check for a static one too. */
336 for (del = &et_list_dynamic; *del; del = &(*del)->next)
337 if ((*del)->table->base == et->base) {
338 /*@only@*/ struct dynamic_et_list *old = *del;
339 *del = old->next;
340 free (old);
341 return k5_mutex_unlock(&et_list_lock);
342 }

Show quoted text
>How-To-Repeat:

Happens every time I use klist, kinit, etc.
Show quoted text
>Fix:

For the moment I'm using a very Quick'N'Dirty fix. I've just removed
the above lines from utils/et/error_message.c. I appreciate that
this is hardly ideal. But it seems to work for now.
Show quoted text
> Running kinit, klist, kadmin, telnet etc all produce messages
> similar to:
>
> klist in free(): error: chunk is already free
> Abort trap

I've tried static builds on x86-linux, and can't find any problems using valgrind or electric
fence. I've also tried alpha-netbsd2.0 with shared libraries and enabled debugging options
in the native malloc, still no hints.

Show quoted text
> anquetil.bath.ac.uk ?// MALLOC_OPTIONS=a /kerberosV/bin/klist
> klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_526)
>
>
> Kerberos 4 ticket cache: /tmp/tkt526
> klist: You have no tickets cached
> klist in free(): warning: chunk is already free
> klist in free(): warning: chunk is already free
> klist in free(): warning: chunk is already free
> klist in free(): warning: chunk is already free
> klist in free(): warning: chunk is already free
> klist in free(): warning: chunk is already free
> anquetil.bath.ac.uk ?//
>
> Note that the command always seems to work OK and the error seems to
> occur as part of the cleanup before the command exits. This is most
> noticable with the telnet command. The failure occurs after the
> connection to the remote site has been closed.
>
> Running a simple program under gdb gives:
>
>
> a.out in free(): error: chunk is already free
>
> Program received signal SIGABRT, Aborted.
> 0x0e16b71d in kill () from /usr/lib/libc.so.34.2
> (gdb) bt
> #0 0x0e16b71d in kill () from /usr/lib/libc.so.34.2
> #1 0x0e19830f in abort () from /usr/lib/libc.so.34.2
> #2 0x0e16fb71 in execve () from /usr/lib/libc.so.34.2
> #3 0x00000002 in ?? ()
> #4 0xcfbf82bc in ?? ()

This stack trace is pretty clearly corrupted.

Could you try running the program under GDB, with a breakpoint in remove_error_table, and
each time it's hit, print out the argument passed in and the stack trace?

I'd also be interested in seeing the order in which profile_library_finalizer and
com_err_terminate get called (profile_library_finalizer should be first), and the value of the
variable 'terminated' in error_message.c when the problem happens.
Date: Tue, 5 Jul 2005 17:16:37 +0100 (BST)
From: Dennis Davis <D.H.Davis@bath.ac.uk>
To: Ken Raeburn via RT <rt-comment@krbdev.mit.edu>
Cc: D.H.Davis@bath.ac.uk
Subject: Re: [krbdev.mit.edu #3087]
RT-Send-Cc:
Download (untitled) / with headers
text/plain 12.2KiB
Show quoted text
>Date: Wed, 8 Jun 2005 20:43:23 -0400 (EDT)
>Message-Id: <rt-3087-14175.17.5894218187344@krbdev.mit.edu>
>Subject: [krbdev.mit.edu #3087]
>In-Reply-To: <rt-3087@krbdev.mit.edu>
>From: Ken Raeburn via RT <rt-comment@krbdev.mit.edu>
>RT-Ticket: krbdev.mit.edu #3087
>Reply-To: rt-comment@krbdev.mit.edu
>To: D.H.Davis@bath.ac.uk
>
>> Running kinit, klist, kadmin, telnet etc all produce messages
>> similar to:
>>
>> klist in free(): error: chunk is already free
>> Abort trap
>
>I've tried static builds on x86-linux, and can't find any problems
>using valgrind or electric fence. I've also tried alpha-netbsd2.0
>with shared libraries and enabled debugging options in the native
>malloc, still no hints.
>
>> anquetil.bath.ac.uk ?// MALLOC_OPTIONS=a /kerberosV/bin/klist
>> klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_526)
>>
>>
>> Kerberos 4 ticket cache: /tmp/tkt526
>> klist: You have no tickets cached
>> klist in free(): warning: chunk is already free
>> klist in free(): warning: chunk is already free
>> klist in free(): warning: chunk is already free
>> klist in free(): warning: chunk is already free
>> klist in free(): warning: chunk is already free
>> klist in free(): warning: chunk is already free
>> anquetil.bath.ac.uk ?//
>>
>> Note that the command always seems to work OK and the error seems to
>> occur as part of the cleanup before the command exits. This is most
>> noticable with the telnet command. The failure occurs after the
>> connection to the remote site has been closed.
>>
>> Running a simple program under gdb gives:
>>
>>
>> a.out in free(): error: chunk is already free
>>
>> Program received signal SIGABRT, Aborted.
>> 0x0e16b71d in kill () from /usr/lib/libc.so.34.2
>> (gdb) bt
>> #0 0x0e16b71d in kill () from /usr/lib/libc.so.34.2
>> #1 0x0e19830f in abort () from /usr/lib/libc.so.34.2
>> #2 0x0e16fb71 in execve () from /usr/lib/libc.so.34.2
>> #3 0x00000002 in ?? ()
>> #4 0xcfbf82bc in ?? ()

Apologies for the *long* delay in replying. I've been sidetracked
by looking at email issues.

Show quoted text
>This stack trace is pretty clearly corrupted.
>
>Could you try running the program under GDB, with a breakpoint in
>remove_error_table, and each time it's hit, print out the argument
>passed in and the stack trace?

Done. The results are appended below. It's pretty obvious that
I'm getting stack trace corruption.

I note that the last five calls to remove_error_table correspond
to lines 83 to 87 of lib/krb5/krb5_libinit.c:


#if !USE_BUNDLE_ERROR_STRINGS
remove_error_table(&et_krb5_error_table);
remove_error_table(&et_kv5m_error_table);
remove_error_table(&et_kdb5_error_table);
remove_error_table(&et_asn1_error_table);
remove_error_table(&et_k524_error_table);
#endif


*but* the pointer passed as the argument appears to be the same
in each case:


#0 remove_error_table (et=0x3c010770) at error_message.c:322
^^^^^^^^^^
|||||||||| same pointer in the last 5 calls


Is this reasonable?

Show quoted text
>I'd also be interested in seeing the order in which
>profile_library_finalizer and com_err_terminate get called
>(profile_library_finalizer should be first), and the value of the
>variable 'terminated' in error_message.c when the problem happens.

I've printed out the value of 'terminated' whenever it seems
possible. The order in which profile_library_finalizer and
com_err_terminate are called seems reversed. It's com_err_terminate
that's called first and then profile_library_finalizer.

I note that I can circumvent this problem by configuring with:


LDFLAGS=-lpthread \
CC=cc CFLAGS="-O2 -g -fPIC -DUSE_BUNDLE_ERROR_STRINGS=1" \

...


Is this a reasonable thing to do? It certainly seems to work!


Script started on Tue Jul 5 14:36:39 2005
merckx.bath.ac.uk ?// MALLOC_OPTIONS=a gdb a.out
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-unknown-openbsd3.7"...
(gdb) break remove_error_table
Breakpoint 1 at 0x1c05d78d: file error_message.c, line 322.
(gdb) break com_err_terminate
Breakpoint 2 at 0x1c05cf3d: file error_message.c, line 64.
(gdb) break profile_library_finalizer
Breakpoint 3 at 0x1c02401d: file prof_file.c, line 59.
(gdb) run
Starting program: /home/ccsdhd/k5login/a.out

Enter username: ccsdhd

Enter password:
Password for ccsdhd looks OK.

Breakpoint 2, com_err_terminate () at error_message.c:64
64 if (! INITIALIZER_RAN(com_err_initialize) || PROGRAM_EXITING())
(gdb) print terminated
$1 = 0
(gdb) bt
#0 com_err_terminate () at error_message.c:64
#1 0x1c0027c8 in __register_frame_info ()
#2 0x1c05eb85 in __fini ()
#3 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#4 0x1c002759 in ___start ()
#5 0x1c0026bf in _start ()
#6 0x00000000 in ?? ()
#7 0xcfbfdff0 in ?? ()
#8 0x00000000 in ?? ()
#9 0x00000001 in ?? ()
#10 0xcfbf6984 in ?? ()
#11 0x00000000 in ?? ()
#12 0xcfbf699f in ?? ()
#13 0xcfbf69d4 in ?? ()
#14 0xcfbf69ee in ?? ()
#15 0xcfbf6a09 in ?? ()
#16 0xcfbf6a1a in ?? ()
#17 0xcfbf6a24 in ?? ()
#18 0xcfbf6a2d in ?? ()
#19 0xcfbf6a4e in ?? ()
#20 0xcfbf6a61 in ?? ()
#21 0xcfbf6a72 in ?? ()
#22 0xcfbf6a85 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.

Breakpoint 3, profile_library_finalizer () at prof_file.c:59
59 if (! INITIALIZER_RAN(profile_library_initializer) || PROGRAM_EXITING())
(gdb) bt
#0 profile_library_finalizer () at prof_file.c:59
#1 0x1c0027c8 in __register_frame_info ()
#2 0x1c05eb85 in __fini ()
#3 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#4 0x1c002759 in ___start ()
#5 0x1c0026bf in _start ()
#6 0x00000000 in ?? ()
#7 0xcfbfdff0 in ?? ()
#8 0x00000000 in ?? ()
#9 0x00000001 in ?? ()
#10 0xcfbf6984 in ?? ()
#11 0x00000000 in ?? ()
#12 0xcfbf699f in ?? ()
#13 0xcfbf69d4 in ?? ()
#14 0xcfbf69ee in ?? ()
#15 0xcfbf6a09 in ?? ()
#16 0xcfbf6a1a in ?? ()
#17 0xcfbf6a24 in ?? ()
#18 0xcfbf6a2d in ?? ()
#19 0xcfbf6a4e in ?? ()
#20 0xcfbf6a61 in ?? ()
#21 0xcfbf6a72 in ?? ()
#22 0xcfbf6a85 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.

Breakpoint 1, remove_error_table (et=0x3c005c07) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$2 = 1
(gdb) bt
#0 remove_error_table (et=0x3c005c07) at error_message.c:322
#1 0x1c0240e3 in profile_library_finalizer () at prof_file.c:63
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Breakpoint 1, remove_error_table (et=0x3c010770) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$3 = 1
(gdb) bt
#0 remove_error_table (et=0x3c010770) at error_message.c:322
#1 0x1c017701 in krb5int_lib_fini () at krb5_libinit.c:83
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Breakpoint 1, remove_error_table (et=0x3c010770) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$4 = 1
(gdb) bt
#0 remove_error_table (et=0x3c010770) at error_message.c:322
#1 0x1c01770d in krb5int_lib_fini () at krb5_libinit.c:84
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Breakpoint 1, remove_error_table (et=0x3c010770) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$5 = 1
(gdb) bt
#0 remove_error_table (et=0x3c010770) at error_message.c:322
#1 0x1c017719 in krb5int_lib_fini () at krb5_libinit.c:85
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Breakpoint 1, remove_error_table (et=0x3c010770) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$6 = 1
(gdb) bt
#0 remove_error_table (et=0x3c010770) at error_message.c:322
#1 0x1c017725 in krb5int_lib_fini () at krb5_libinit.c:86
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Breakpoint 1, remove_error_table (et=0x3c010770) at error_message.c:322
322 if (CALL_INIT_FUNCTION(com_err_initialize))
(gdb) print terminated
$7 = 1
(gdb) bt
#0 remove_error_table (et=0x3c010770) at error_message.c:322
#1 0x1c017731 in krb5int_lib_fini () at krb5_libinit.c:87
#2 0x1c0027c8 in __register_frame_info ()
#3 0x1c05eb85 in __fini ()
#4 0x0c82616a in exit () from /usr/lib/libc.so.34.2
#5 0x1c002759 in ___start ()
#6 0x1c0026bf in _start ()
#7 0x00000000 in ?? ()
#8 0xcfbfdff0 in ?? ()
#9 0x00000000 in ?? ()
#10 0x00000001 in ?? ()
#11 0xcfbf6984 in ?? ()
#12 0x00000000 in ?? ()
#13 0xcfbf699f in ?? ()
#14 0xcfbf69d4 in ?? ()
#15 0xcfbf69ee in ?? ()
#16 0xcfbf6a09 in ?? ()
#17 0xcfbf6a1a in ?? ()
#18 0xcfbf6a24 in ?? ()
#19 0xcfbf6a2d in ?? ()
#20 0xcfbf6a4e in ?? ()
#21 0xcfbf6a61 in ?? ()
#22 0xcfbf6a72 in ?? ()
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) c
Continuing.
a.out in free(): warning: chunk is already free

Program exited with code 036.
(gdb) q
merckx.bath.ac.uk ?// exit

Script done on Tue Jul 5 14:39:38 2005
--
Dennis Davis, BUCS, University of Bath, Bath, BA2 7AY, UK
D.H.Davis@bath.ac.uk Phone: +44 1225 386101