Bug#1135798: openssh-client: OpenSSH in trixie-p-u breaks ControlPersist

Colin Watson <[email protected]> Wed, 6 May 2026 12:06:03 +0100
Newsgroups gmane.linux.debian.devel.ssh
Message-ID <afsgmweZs7ya_0FI__22545.8523070969$1778065654$gmane$org@riva.ucam.org>
On Tue, May 05, 2026 at 09:42:31PM -0400, Jon wrote:
>I'm not sure if this is the right way to file a bug against something
>sitting in stable-proposed-updates. I'm flagging it as important only
>because it would be a notable regression if it reached stable.

Oops - thanks for the heads-up!  CCing #1135624 so that the release team 
is aware of the regression.

>The recent upload of OpenSSH to trixie-p-u backported the IPQoS changes
>from 10.1p1 without including the fix for bz#3872
>
>https://bugzilla.mindrot.org/show_bug.cgi?id=3872
>
>https://anongit.mindrot.org/openssh.git/commit/?h=V_10_1&id=979cbc2c1e0c9cd2f60d45d8d1da69519ec425cf
>
>I've confirmed that the bug appears in the package sitting in trixie-p-u

I'm test-building the attached patch, and will upload to trixie-p-u if 
it checks out.

-- 
Colin Watson (he/him)                              [[email protected]]
openssh_10.0p1-7+deb13u4.debdiff (text/plain, 4.2 KB)
diff -Nru openssh-10.0p1/debian/.git-dpm openssh-10.0p1/debian/.git-dpm
--- openssh-10.0p1/debian/.git-dpm	2026-05-05 11:25:39.000000000 +0100
+++ openssh-10.0p1/debian/.git-dpm	2026-05-06 12:01:39.000000000 +0100
@@ -1,6 +1,6 @@
 # see git-dpm(1) from git-dpm package
-4207d8a7a4060cad77ec1b78ff08f3e0546c4fbd
-4207d8a7a4060cad77ec1b78ff08f3e0546c4fbd
+aa43d30c43eee0901aa8e3993b47c712e4d4ae16
+aa43d30c43eee0901aa8e3993b47c712e4d4ae16
 860fa104f07024318a40065f07708daa5753f55d
 860fa104f07024318a40065f07708daa5753f55d
 openssh_10.0p1.orig.tar.gz
diff -Nru openssh-10.0p1/debian/changelog openssh-10.0p1/debian/changelog
--- openssh-10.0p1/debian/changelog	2026-05-05 11:25:39.000000000 +0100
+++ openssh-10.0p1/debian/changelog	2026-05-06 12:01:40.000000000 +0100
@@ -1,3 +1,10 @@
+openssh (1:10.0p1-7+deb13u4) UNRELEASED; urgency=medium
+
+  * Don't reuse c->isatty for signalling that the remote channel has a tty
+    attached (closes: #1135798).
+
+ -- Colin Watson <[email protected]>  Wed, 06 May 2026 12:01:40 +0100
+
 openssh (1:10.0p1-7+deb13u3) trixie; urgency=medium
 
   * Backport minor security fixes from 10.3p1:
diff -Nru openssh-10.0p1/debian/patches/avoid-channel-isatty-overloading.patch openssh-10.0p1/debian/patches/avoid-channel-isatty-overloading.patch
--- openssh-10.0p1/debian/patches/avoid-channel-isatty-overloading.patch	1970-01-01 01:00:00.000000000 +0100
+++ openssh-10.0p1/debian/patches/avoid-channel-isatty-overloading.patch	2026-05-06 12:01:39.000000000 +0100
@@ -0,0 +1,67 @@
+From aa43d30c43eee0901aa8e3993b47c712e4d4ae16 Mon Sep 17 00:00:00 2001
+From: "[email protected]" <[email protected]>
+Date: Tue, 7 Oct 2025 08:02:32 +0000
+Subject: upstream: don't reuse c->isatty for signalling that the remote
+ channel
+
+has a tty attached as this causes side effects, e.g. in channel_handle_rfd().
+bz3872
+
+ok markus@
+
+OpenBSD-Commit-ID: 4cd8a9f641498ca6089442e59bad0fd3dcbe85f8
+
+Origin: upstream, https://anongit.mindrot.org/openssh.git/commit/?id=979cbc2c1e0c9cd2f60d45d8d1da69519ec425cf
+Bug-Debian: https://bugs.debian.org/1135798
+Last-Update: 2026-05-06
+
+Patch-Name: avoid-channel-isatty-overloading.patch
+---
+ channels.c | 7 ++++---
+ channels.h | 1 +
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/channels.c b/channels.c
+index 1a8f8ad4a..1fe9710a4 100644
+--- a/channels.c
++++ b/channels.c
+@@ -368,7 +368,7 @@ channel_classify(struct ssh *ssh, Channel *c)
+ {
+ 	struct ssh_channels *sc = ssh->chanctxt;
+ 	const char *type = c->xctype == NULL ? c->ctype : c->xctype;
+-	const char *classifier = c->isatty ?
++	const char *classifier = (c->isatty || c->remote_has_tty) ?
+ 	    sc->bulk_classifier_tty : sc->bulk_classifier_notty;
+ 
+ 	c->bulk = type != NULL && match_pattern_list(type, classifier, 0) == 1;
+@@ -572,7 +572,7 @@ channel_new(struct ssh *ssh, char *ctype, int type, int rfd, int wfd, int efd,
+ void
+ channel_set_tty(struct ssh *ssh, Channel *c)
+ {
+-	c->isatty = 1;
++	c->remote_has_tty = 1;
+ 	channel_classify(ssh, c);
+ }
+ 
+@@ -1063,7 +1063,8 @@ channel_format_status(const Channel *c)
+ 	    c->rfd, c->wfd, c->efd, c->sock, c->ctl_chan,
+ 	    c->have_ctl_child_id ? "c" : "nc", c->ctl_child_id,
+ 	    c->io_want, c->io_ready,
+-	    c->isatty ? "T" : "", c->bulk ? "B" : "I");
++	    c->isatty ? "T" : (c->remote_has_tty ? "RT" : ""),
++	    c->bulk ? "B" : "I");
+ 	return ret;
+ }
+ 
+diff --git a/channels.h b/channels.h
+index a84c9dfdd..b33db8d8e 100644
+--- a/channels.h
++++ b/channels.h
+@@ -145,6 +145,7 @@ struct Channel {
+ 	int     ctl_chan;	/* control channel (multiplexed connections) */
+ 	uint32_t ctl_child_id;	/* child session for mux controllers */
+ 	int	have_ctl_child_id;/* non-zero if ctl_child_id is valid */
++	int     remote_has_tty;	/* remote side has a tty */
+ 	int     isatty;		/* rfd is a tty */
+ #ifdef _AIX
+ 	int     wfd_isatty;	/* wfd is a tty */
diff -Nru openssh-10.0p1/debian/patches/series openssh-10.0p1/debian/patches/series
--- openssh-10.0p1/debian/patches/series	2026-05-05 11:25:39.000000000 +0100
+++ openssh-10.0p1/debian/patches/series	2026-05-06 12:01:39.000000000 +0100
@@ -40,3 +40,4 @@
 ipqos-deprecate-tos-keywords.patch
 ipqos-set-at-runtime.patch
 ipqos-set-extended-type.patch
+avoid-channel-isatty-overloading.patch