[ 
https://issues.apache.org/jira/browse/SSHD-848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16641940#comment-16641940
 ] 

Roberto Deandrea commented on SSHD-848:
---------------------------------------

Our proposed solution in StaticIOHandler.sessionCreated() caused a deadlock in 
SSH client. We found a better solution for the issue changing code in 
StaticIOHandler.sessionClosed() in defaultForwardingFilter.java.

 

We changed the code as the following:

 

        @Override
        public void sessionClosed(IoSession session) throws Exception {
            TcpipClientChannel channel = (TcpipClientChannel) 
session.removeAttribute(TcpipClientChannel.class);
                        
            Throwable cause = (Throwable) 
session.removeAttribute(TcpipForwardingExceptionMarker.class);
            if (channel != null) {
                if (debugEnabled) {
                    log.debug("sessionClosed({}) closing channel={} after {} 
messages - cause={}",
                            session, channel, messagesCounter, (cause == null) 
? null : cause.getClass().getSimpleName());
                }
                
                if (cause != null) {
                  channel.close(true);
                } else {
                  OpenFuture openFuture = channel.getOpenFuture();
                  // channel.getOpenFuture().await();
        
                  if (!openFuture.isDone()) {
                    openFuture.addListener(f -> {
                      // If exception signaled then close channel immediately
                      channel.close(false);        
                    });
                  }
                  else {
                    channel.close(false);                            
                  }                  
                }
            }
        }

 

What do you think about it?

 

> Possible bug opening local port forwarding channel
> --------------------------------------------------
>
>                 Key: SSHD-848
>                 URL: https://issues.apache.org/jira/browse/SSHD-848
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.0.1
>            Reporter: Roberto Deandrea
>            Priority: Major
>         Attachments: testlpf.ko, testlpf.ok
>
>
> Hi , We found a possible bug opening a local port forwarding channel.
> Scenario : The SSH client and server are based on Apache SSHD 2.0.1. There is 
> a FTP client sending a file through a local port forwarding channel to a 
> target server.
> The problem manifests when the SSH server is busy and returns the 
> SSH_MSG_CHANNEL_OPEN_CONFIRMATION with a some delay and the client is very 
> fast to send only a few bytes on a local port forwarding channel.
> The outcome is the FTP client is NOT able to send bytes through the channel 
> to the target server.
> Into SSH client traces we see :
> org.apache.sshd.common.channel.WindowClosedException: Already closed: 
> Window[client/remote](TcpipClientChannel[id=4, 
> recipient=4]-ClientSessionImpl[roberto@/192.168.50.61:10022])
>  
> According to us there is a chance that if we don't AWAIT the local port 
> forward channel is TOTALLY opened, when the client is very fast to send 
> bytes... it closes its connection, ao the channel that is already closing 
> prevents bytes to flow through the channel to the target server.
>  
> We guess there is a code bug in *DefaultForwardingFilter.sessionCreated()* 
> method.
> We add the following line at the end of the method and the problem seems 
> definitely fixed.
>             *channel.getOpenFuture().await();*
>  
> Please, can you troubleshoot this issue and comment about our potential code 
> fix ?
> Thanks in advance.
>  
> I attached  the files:
> testslpf.ko SSH client traces with original code and a failed attempt
> testslpf.ok SSH client traces with our code changes and a successful attempt
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to