Bugzilla – Attachment 1044 Details for
Bug 1135
ssh-agent auth socket problem = infinite loop 100% cpu
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
debug session and source code snippets pinpointing the problem
debug_session.txt (text/plain), 3.99 KB, created by
Anastasius Focht
on 2005-12-16 20:55:51 AEDT
(
hide
)
Description:
debug session and source code snippets pinpointing the problem
Filename:
MIME Type:
Creator:
Anastasius Focht
Created:
2005-12-16 20:55:51 AEDT
Size:
3.99 KB
patch
obsolete
>In my ".bashrc" > >---- snip .bashrc --- > >[ -z "$SSH_AUTH_SOCK" ] && eval `ssh-agent -s` >[ -z "$SSH_AGENT_PID" ] || ssh-add -l >/dev/null 2>&1 || ssh-add > >And ".logout" > >---- snip .lgout ----- > >kill $SSH_AGENT_PID > >---- snip ----- > >When i update my cygwin installation using "setup.exe" i occasionally >get the ssh-agent hanging while eating 100% cpu. >This happens while the Cygwin Setup Post-Install Script runs. >If i renice the "ssh-agent" process, setup (gui) exits cleanly but the >process is eating cpu forever. > >$ ssh -V >OpenSSH_4.2p1, OpenSSL 0.9.8a 11 Oct 2005 > >Using my favorite win32 user mode debugger, ollydbg: > >---- snip ----- > >Threads >Ident Entry Data block Last error >Status Priority User time System time >0000056C 7C810856 7FFDD000 ERROR_SUCCESS (00000000) >Paused 32 + 0 0.0000 s 0.0000 s >00000C4C 00000000 7FFDF000 ERROR_IO_PENDING (000003E5) >Active 32 - 15 18.6250 s 29.1718 s >00000F9C 7C810856 7FFDE000 ERROR_SUCCESS (00000000) >Paused 32 + 0 0.0000 s 0.0000 s > >---- snip ----- > >Thread 0xc4c is eating cpu (32-15 = reniced it to idle prio) forever. > >I debugged thru disassembly and using cygwin dll symbols + ssh-agent >sources (dont have debug symbols)... > >----------------snip ssh-agent.c ----------------------------- > >http://www.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/ssh/ssh-age >nt.c?rev=1.123&content-type=text/plain > >skip: > new_socket(AUTH_SOCKET, sock); > if (ac > 0) { > signal(SIGALRM, check_parent_exists); > alarm(10); > } > idtab_init(); > if (!d_flag) > signal(SIGINT, SIG_IGN); > signal(SIGPIPE, SIG_IGN); > signal(SIGHUP, cleanup_handler); > signal(SIGTERM, cleanup_handler); > nalloc = 0; > > while (1) { > prepare_select(&readsetp, &writesetp, &max_fd, &nalloc); > if (select(max_fd + 1, readsetp, writesetp, NULL, NULL) >< 0) { > if (errno == EINTR) > continue; > fatal("select: %s", strerror(errno)); > } > after_select(readsetp, writesetp); > } > /* NOTREACHED */ >} > > >static void >after_select(fd_set *readset, fd_set *writeset) >{ > struct sockaddr_un sunaddr; > socklen_t slen; > char buf[1024]; > int len, sock; > u_int i; > uid_t euid; > gid_t egid; > > for (i = 0; i < sockets_alloc; i++) > switch (sockets[i].type) { > case AUTH_UNUSED: > break; > case AUTH_SOCKET: > if (FD_ISSET(sockets[i].fd, readset)) { > slen = sizeof(sunaddr); > sock = accept(sockets[i].fd, > (struct sockaddr *) &sunaddr, >&slen); > if (sock < 0) { > error("accept from AUTH_SOCKET: >%s", > strerror(errno)); > break; > } > >----------------snip ssh-agent.c ----------------------------- > >0022EE0C 00402F7C ssh-agen.00402F7C >0022EE10 00000001 |nfds = 1 >0022EE14 004754E0 |Readfds = 004754E0 >0022EE18 004754F0 |Writefds = 004754F0 >0022EE1C 00000000 |Exceptfds = NULL >0022EE20 00000000 \pTimeout = NULL >0022EE24 00350688 >0022EE28 0022EF00 >0022EE2C 00000764 >0022EE30 7C81B808 RETURN to kernel32.7C81B808 from kernel32.7C80250B >0022EE34 0022D238 >0022EE38 61133000 ASCII "Cygwin Setup Post-Install Script" > >----------------snip ----------------------------- > >The problem is the following (forever) loop: > >---- > >while (1) { > prepare_select(&readsetp, &writesetp, &max_fd, &nalloc); > if (select(max_fd + 1, readsetp, writesetp, NULL, NULL) >< 0) { > if (errno == EINTR) > continue; > fatal("select: %s", strerror(errno)); > } > after_select(readsetp, writesetp); > } >---- > >"int cygwin_select(int, _types_fd_set*, _types_fd_set*, _types_fd_set*, >timeval*)" > >in ssh-agents's main is returning "1" (eax) > >"after_select" is called which calls "cygwin1.accept()" > >"accept" returns "-1" (eax) and lasterror/errno is 0x6C > >errno = 0x6C -> #define ESHUTDOWN 108 /* Cannot send after >transport endpoint shutdown */ > >----- > >The main question is: can cygwin's "select" be successful and following >"accept" fail due to non-socket? > >Is the problem openssh or cygwin related? >Any thoughts?
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 1135
: 1044