| Summary: | Race condition in clientloop.c? | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Portable OpenSSH | Reporter: | Nicolas Williams <Nicolas.Williams> | ||||
| Component: | ssh | Assignee: | OpenSSH Bugzilla mailing list <openssh-bugs> | ||||
| Status: | CLOSED FIXED | ||||||
| Severity: | major | ||||||
| Priority: | P2 | ||||||
| Version: | -current | ||||||
| Hardware: | All | ||||||
| OS: | All | ||||||
| Attachments: |
|
||||||
|
Description
Nicolas Williams
2002-03-13 08:04:07 AEDT
Created attachment 40 [details]
Debug output, lsof output, etc...
Aha! Yes, there is a race. It's there in 2.9p2, but apparently not in 3.0.2p1. Essentially the "if (compat20 && session_closed && !channel_still_open())" check at the top of the client loop is not close enough to the call to select() in client_wait_until_can_do_something(). In fact, client_wait_until_can_do_something() calls channel_prepare_select() which calls channel_handler() which may well call chan_is_dead() which may leave no channels open and yet client_wait_until_can_do_something() will still go into the select(). Mass change of RESOLVED bugs to CLOSED |