Uploaded image for project: 'MINA SSHD'
  1. MINA SSHD
  2. SSHD-1262

Unhandled SSH_MSG_CHANNEL_WINDOW_ADJUST leeds to SocketTimeoutException

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.7.0, 2.8.0
    • 2.9.0
    • Important

    Description

      Wanted to open a local port forwarding to an SSH server and afterwards connect to MQTT server over the SSh tunnel. During the MQTT connection attempt I encountered a SocketTimeoutException in the logs (StackTrace below).

      What I could see in the logs is that the server is sending an initial window size of 0 and afterwards the waitForCondition method is throwing the SocketTimeoutException .

      After analyzing the logs I maybe have an idea what is going on here. My assumption is that  there is some deadlock in case the initial window size is 0 and the SSH_MSG_CHANNEL_WINDOW_ADJUST  isn't handled properly. 

      I have attached the whole log file. Lines of interest are from 169 to 229.

      Tested with 2.7.0 and 2.8.0.

       

      WARN org.apache.sshd.common.forward.DefaultForwarder - exceptionCaught(Nio2Session[local=/127.0.0.1:44259, remote=/127.0.0.1:60188]) SocketTimeoutException: waitForCondition(Window[client/remote](TcpipClientChannel[id=0, recipient=0]-ClientSessionImpl[Admin@/x.xxx.xx.x:xxxx])) timeout exceeded: PT30S java.net.SocketTimeoutException: waitForCondition(Window[client/remote](TcpipClientChannel[id=0, recipient=0]-ClientSessionImpl[Admin@/x.xxx.xx.x:xxxx])) timeout exceeded: PT30S     at org.apache.sshd.common.channel.Window.waitForCondition(Window.java:332)     at org.apache.sshd.common.channel.Window.waitForSpace(Window.java:286)     at org.apache.sshd.common.channel.ChannelOutputStream.write(ChannelOutputStream.java:154)     at org.apache.sshd.client.channel.ClientChannelPendingMessagesQueue.writeMessage(ClientChannelPendingMessagesQueue.java:174)     at org.apache.sshd.client.channel.ClientChannelPendingMessagesQueue.flushPendingQueue(ClientChannelPendingMessagesQueue.java:221)     at org.apache.sshd.client.channel.ClientChannelPendingMessagesQueue.operationComplete(ClientChannelPendingMessagesQueue.java:206)     at org.apache.sshd.client.channel.ClientChannelPendingMessagesQueue.operationComplete(ClientChannelPendingMessagesQueue.java:51)     at org.apache.sshd.common.future.AbstractSshFuture.notifyListener(AbstractSshFuture.java:159)     at org.apache.sshd.common.future.DefaultSshFuture.notifyListeners(DefaultSshFuture.java:215)     at org.apache.sshd.common.future.DefaultSshFuture.setValue(DefaultSshFuture.java:112)     at org.apache.sshd.client.future.DefaultOpenFuture.setOpened(DefaultOpenFuture.java:68)     at org.apache.sshd.client.channel.AbstractClientChannel.handleOpenSuccess(AbstractClientChannel.java:360)     at org.apache.sshd.common.session.helpers.AbstractConnectionService.channelOpenConfirmation(AbstractConnectionService.java:545)     at org.apache.sshd.common.session.helpers.AbstractConnectionService.process(AbstractConnectionService.java:456)     at org.apache.sshd.common.session.helpers.AbstractSession.doHandleMessage(AbstractSession.java:503)     at org.apache.sshd.common.session.helpers.AbstractSession.handleMessage(AbstractSession.java:429)     at org.apache.sshd.common.session.helpers.AbstractSession.decode(AbstractSession.java:1466)     at org.apache.sshd.common.session.helpers.AbstractSession.messageReceived(AbstractSession.java:389)     at org.apache.sshd.common.session.helpers.AbstractSessionIoHandler.messageReceived(AbstractSessionIoHandler.java:64)     at org.apache.sshd.common.io.nio2.Nio2Session.handleReadCycleCompletion(Nio2Session.java:359)     at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:336)     at org.apache.sshd.common.io.nio2.Nio2Session$1.onCompleted(Nio2Session.java:333)     at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.lambda$completed$0(Nio2CompletionHandler.java:38)     at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)     at org.apache.sshd.common.io.nio2.Nio2CompletionHandler.completed(Nio2CompletionHandler.java:37)     at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:129)     at java.base/sun.nio.ch.Invoker$2.run(Invoker.java:221)     at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:113)     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)     at java.base/java.lang.Thread.run(Thread.java:833) 

       

       

      Attachments

        1. failing-pf-trace-logs.txt
          268 kB
          Stefan Maute

        Activity

          People

            twolf Thomas Wolf
            stmaute Stefan Maute
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 1h
                1h