Module Name:    src
Committed By:   christos
Date:           Fri Dec 24 21:52:48 UTC 2021

Modified Files:
        src/crypto/external/bsd/openssh/dist: channels.c

Log Message:
put back the tcpwinsz initialization code.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/crypto/external/bsd/openssh/dist/channels.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/openssh/dist/channels.c
diff -u src/crypto/external/bsd/openssh/dist/channels.c:1.33 src/crypto/external/bsd/openssh/dist/channels.c:1.34
--- src/crypto/external/bsd/openssh/dist/channels.c:1.33	Fri Dec 24 13:16:11 2021
+++ src/crypto/external/bsd/openssh/dist/channels.c	Fri Dec 24 16:52:48 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: channels.c,v 1.33 2021/12/24 18:16:11 christos Exp $	*/
+/*	$NetBSD: channels.c,v 1.34 2021/12/24 21:52:48 christos Exp $	*/
 /* $OpenBSD: channels.c,v 1.408 2021/09/14 11:04:21 mbuhl Exp $ */
 
 /*
@@ -42,7 +42,7 @@
  */
 
 #include "includes.h"
-__RCSID("$NetBSD: channels.c,v 1.33 2021/12/24 18:16:11 christos Exp $");
+__RCSID("$NetBSD: channels.c,v 1.34 2021/12/24 21:52:48 christos Exp $");
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -1114,10 +1114,34 @@ channel_pre_connecting(struct ssh *ssh, 
 	FD_SET(c->sock, writeset);
 }
 
+static int
+channel_tcpwinsz(struct ssh *ssh)
+{
+	u_int32_t tcpwinsz = 0;
+	socklen_t optsz = sizeof(tcpwinsz);
+	int ret = -1;
+
+	/* if we aren't on a socket return 128KB*/
+	if(!ssh_packet_connection_is_on_socket(ssh)) 
+	    return(128*1024);
+	ret = getsockopt(ssh_packet_get_connection_in(ssh),
+			 SOL_SOCKET, SO_RCVBUF, &tcpwinsz, &optsz);
+	/* return no more than 64MB */
+	if ((ret == 0) && tcpwinsz > BUFFER_MAX_LEN_HPN)
+	    tcpwinsz = BUFFER_MAX_LEN_HPN;
+	debug2("tcpwinsz: %d for connection: %d", tcpwinsz, 
+	       ssh_packet_get_connection_in(ssh));
+	return(tcpwinsz);
+}
+
 static void
 channel_pre_open(struct ssh *ssh, Channel *c,
     fd_set *readset, fd_set *writeset)
 {
+        /* check buffer limits */
+	if ((!c->tcpwinsz) || (c->dynamic_window > 0))
+    	    c->tcpwinsz = channel_tcpwinsz(ssh);
+	
 	if (c->istate == CHAN_INPUT_OPEN &&
 	    c->remote_window > 0 &&
 	    sshbuf_len(c->input) < c->remote_window &&

Reply via email to