[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bug#98071: symlink to itself hangs
From: |
Marcus Brinkmann |
Subject: |
Bug#98071: symlink to itself hangs |
Date: |
Sun, 20 May 2001 02:36:04 +0200 |
User-agent: |
Mutt/1.2i |
Package: hurd
Hi,
the following doesn't return:
$ cd /tmp
$ ln -s /tmp/x x
$ ls x
The variant "ln -s x x" does not show such errornous behaviour.
Filesystem is ext2fs. It is sufficient to do "ls".
Here is a backtrace:
Script started on Sun May 20 02:23:35 2001
marcus@ulysses:/tmp$ gdb /b bin/ls 17841
GNU gdb 5.0
Copyright 2000 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-gnu0.2"...
(no debugging symbols found)...
/tmp/17841: No such file or directory.
Attaching to program `/bin/ls', pid 17841
Reading symbols from /lib/debug/libc.so.0.2...done.
Loaded symbols for /lib/debug/libc.so.0.2
Reading symbols from /lib/ld.so...done.
Loaded symbols for /lib/ld.so
Reading symbols from /lib/debug/libmachuser.so.1...done.
Loaded symbols for /lib/debug/libmachuser.so.1
Reading symbols from /lib/debug/libhurduser.so.0.0...done.
Loaded symbols for /lib/debug/libhurduser.so.0.0
[Switching to thread 17841.1]
(gdb) bt full
#0 0x105af11 in _hurd_intr_rpc_msg_in_trap () at intr-msg.c:118
err = 0
ss = (struct hurd_sigstate *) 0x11aa808
user_option = 3
user_timeout = 0
m = (union msg *) 0x1020c28
msgh_bits = 5395
remote_port = 22
msgid = 20018
save_data = {i = {335546380, 795897204}}
#1 0x119bfbb in __dir_lookup (start_dir=22, file_name=0x102165d "tmp/x",
flags=0, mode=0, do_retry=0x1021610, retry_name=0x102165c "/tmp/x",
result=0x1021a98)
at
/mnt/marcus/gnu/hurd/glibc/glibc-2.2.2/i386-gnu/obj/hurd/RPC_dir_lookup.c:183
flags = 0
do_retry = (retry_type *) 0x11aa808
result = (mach_port_t *) 0x0
Mess = {In = {Head = {msgh_bits = 2147488256, msgh_size = 1076,
msgh_remote_port = 0, msgh_local_port = 43, msgh_seqno = 241946,
msgh_id = 20118}, file_nameType = {msgt_name = 2, msgt_size = 32,
msgt_number = 1, msgt_inline = 1, msgt_longform = 0,
msgt_deallocate = 0, msgt_unused = 0},
file_name = "\000\000\000\000\002
\001\020\003\000\000\000\f\b\000\024/tmp/x---Type <return> to continue, or q
<return> to quit---
", '\000' <repeats 1001 times>, flagsType = {msgt_name = 2, msgt_size = 32,
msgt_number = 1, msgt_inline = 1, msgt_longform = 0,
msgt_deallocate = 0, msgt_unused = 0}, flags = 0, modeType = {
msgt_name = 2, msgt_size = 32, msgt_number = 1, msgt_inline = 1,
msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}, mode = 0},
Out = {Head = {msgh_bits = 2147488256, msgh_size = 1076,
msgh_remote_port = 0, msgh_local_port = 43, msgh_seqno = 241946,
msgh_id = 20118}, RetCodeType = {msgt_name = 2, msgt_size = 32,
msgt_number = 1, msgt_inline = 1, msgt_longform = 0,
msgt_deallocate = 0, msgt_unused = 0}, RetCode = 0, do_retryType = {
msgt_name = 2, msgt_size = 32, msgt_number = 1, msgt_inline = 1,
msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0},
do_retry = FS_RETRY_MAGICAL, retry_nameType = {msgt_name = 12,
msgt_size = 8, msgt_number = 1024, msgt_inline = 1, msgt_longform = 0,
msgt_deallocate = 0, msgt_unused = 0},
retry_name = "/tmp/x", '\000' <repeats 1002 times>, "\002
\001\020\000\000\000\000\002 \001\020\000\000\000", resultType = {msgt_name =
17,
msgt_size = 32, msgt_number = 1, msgt_inline = 1, msgt_longform = 0,
msgt_deallocate = 0, msgt_unused = 0}, result = 0}}
OutP = (Reply *) 0x1020c28
msg_result = 0
msgh_simple = 0
msgh_size = 18524168
file_nameType = {msgt_name = 12, msgt_size = 8, msgt_number = 1024,
---Type <return> to continue, or q <return> to quit---
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
flagsType = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
modeType = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
RetCodeCheck = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
do_retryCheck = {msgt_name = 2, msgt_size = 32, msgt_number = 1,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
retry_nameCheck = {msgt_name = 12, msgt_size = 8, msgt_number = 1024,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
resultCheck = {msgt_name = 17, msgt_size = 32, msgt_number = 1,
msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0}
#2 0x1047b18 in lookup_op (startdir=22) at hurdlookup.c:128
error = 0
#3 0x1046b74 in _hurd_ports_use (which=1, operate=0x1021150) at hurdinit.c:42
port = (struct hurd_port *) 0x11a9f94
__p = (struct hurd_port *) 0x11a9f94
__link = {resource = {next = 0x0, prevp = 0x11a9f98}, thread = {
next = 0x0, prevp = 0x11aac5c}, cleanup = 0x1065f3c <_hurd_port_cleanup>,
cleanup_data = 0x16}
__result = 0
which = 0
#4 0x104830f in __hurd_file_name_lookup_retry (
---Type <return> to continue, or q <return> to quit---
use_init_port=0x10469a0 <_hurd_ports_use>,
get_dtable_port=0x105e1e0 <__getdport>, lookup=0x119bf10 <__dir_lookup>,
doretry=FS_RETRY_MAGICAL, retryname=0x102165c "/tmp/x", flags=0, mode=0,
result=0x1021a98) at hurdlookup.c:376
startdir = 0
dirport = 1
err = 0
file_name = 0x102165d "tmp/x"
nloops = 0
#5 0x1047ab6 in __hurd_file_name_lookup (
use_init_port=0x10469a0 <_hurd_ports_use>,
get_dtable_port=0x105e1e0 <__getdport>, lookup=0x119bf10 <__dir_lookup>,
file_name=0x80578e1 "tmp/x", flags=0, mode=0, result=0x1021a98)
at hurdlookup.c:97
err = 0
doretry = FS_RETRY_MAGICAL
retryname = "/tmp/x", '\000' <repeats 1017 times>
startport = 1
#6 0x10485e9 in __file_name_lookup (file_name=0x80578e0 "/tmp/x", flags=0,
mode=0) at hurdlookup.c:514
err = 0
result = 0
#7 0x1105be0 in __xstat (vers=0, file=0x80578e0 "/tmp/x", buf=0x1021b1c)
at ../sysdeps/mach/hurd/xstat.c:34
---Type <return> to continue, or q <return> to quit---
err = EKERN_PROTECTION_FAILURE
port = 16915228
#8 0x804b0e2 in strcpy () at ../sysdeps/generic/strcpy.c:31
No symbol table info available.
#9 0x8049822 in strcpy () at ../sysdeps/generic/strcpy.c:31
No symbol table info available.
#10 0x1067720 in __libc_start_main (main=0x8049658 <strcpy+480>, argc=2,
ubp_av=0x1021c30,
init=0x8049020 <_hurdsig_fault_exc_server_routines+116003704>,
fini=0x804f83c <__umoddi3+460>, rtld_fini=0xe6a0 <_dl_fini>,
stack_end=0x1021c2c) at ../sysdeps/generic/libc-start.c:129
fini = (void (*)()) 0x1021b1c
rtld_fini = (void (*)()) 0x1020b94
ubp_ev = (char **) 0x0
(gdb) quit
The program is running. Quit anyway (and detach it)? (y or n) y
Detaching from program `/bin/ls' pid 17841
marcus@ulysses:/tmp$ exit
Script done on Sun May 20 02:24:02 2001
- Bug#98071: symlink to itself hangs,
Marcus Brinkmann <=