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

Lyor Goldstein commented on SSHD-1262:
--------------------------------------

The log clearly shows the {{SSH_MSG_CHANNEL_OPEN_CONFIRMATION}} with the zero 
size
{noformat}
2022-04-13 05:51:41:644  [sshd-SshClient[5313b03e]-nio2-thread-8] DEBUG 
org.apache.sshd.client.session.ClientConnectionService - 
channelOpenConfirmation(TcpipClientChannel[id=0, 
recipient=-1]-ClientSessionImpl[User@/x.xxx.xx.xxx:xxxx]) 
SSH_MSG_CHANNEL_OPEN_CONFIRMATION sender=0, window-size=0, packet-size=65536
{noformat}
and no further window adjustments - therefore, according to the [RFC 4254 
section 5.1|https://datatracker.ietf.org/doc/html/rfc4254#section-5.1]
{quote}
The 'initial window size' specifies how many bytes of channel data can be sent 
to the sender of this message without adjusting the window
{quote}
which in this case is +zero+ - i.e., the client (or server) will wait until 
window is expanded. There may be a special behavior that uses zero size to mean 
something else using KEX extensions (see RFC-8308, 9142) however I do not see 
such a request in the log file + we do not support all of these extensions (I 
think {{xon/xoff}} is the relevant one to this issue)

> Unhandled SSH_MSG_CHANNEL_WINDOW_ADJUST leeds to SocketTimeoutException
> -----------------------------------------------------------------------
>
>                 Key: SSHD-1262
>                 URL: https://issues.apache.org/jira/browse/SSHD-1262
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.7.0, 2.8.0
>            Reporter: Stefan Maute
>            Priority: Major
>              Labels: mina, sshd
>         Attachments: failing-pf-trace-logs.txt
>
>
> 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.
>  
> {code:java}
> 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) {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to