From 0e6a8b79aa120ff50758944a7ff0113a3d87a0eac0acc2b95327d335e4ca47cc Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 7 Oct 2025 14:47:29 +0300 Subject: [PATCH] Fix tty problems with existing control socket https://marc.info/?l=openssh-unix-dev&m=175982625513497&w=2 --- .../security/openssh-10.1p1-tty-fix.patch | 69 +++++++++++++++++++ build/skel/security/openssh-10.1p1.do | 1 + 2 files changed, 70 insertions(+) create mode 100644 build/skel/security/openssh-10.1p1-tty-fix.patch diff --git a/build/skel/security/openssh-10.1p1-tty-fix.patch b/build/skel/security/openssh-10.1p1-tty-fix.patch new file mode 100644 index 0000000..21deb85 --- /dev/null +++ b/build/skel/security/openssh-10.1p1-tty-fix.patch @@ -0,0 +1,69 @@ +commit beae06f56e0d0a66ca535896149d5fb0b2e8a1b4 +Author: djm@openbsd.org +Date: Tue Oct 7 08:02:32 2025 +0000 + + 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 + +diff --git a/channels.c b/channels.c +index f1d7bcf34..80014ff34 100644 +--- a/channels.c ++++ b/channels.c +@@ -1,4 +1,4 @@ +-/* $OpenBSD: channels.c,v 1.451 2025/09/25 06:33:19 djm Exp $ */ ++/* $OpenBSD: channels.c,v 1.452 2025/10/07 08:02:32 djm Exp $ */ + /* + * Author: Tatu Ylonen + * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland +@@ -362,7 +362,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; +@@ -566,7 +566,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); + } + +@@ -1078,7 +1078,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 df7c7f364..7456541f8 100644 +--- a/channels.h ++++ b/channels.h +@@ -1,4 +1,4 @@ +-/* $OpenBSD: channels.h,v 1.161 2025/09/25 06:33:19 djm Exp $ */ ++/* $OpenBSD: channels.h,v 1.162 2025/10/07 08:02:32 djm Exp $ */ + + /* + * Author: Tatu Ylonen +@@ -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 --git a/build/skel/security/openssh-10.1p1.do b/build/skel/security/openssh-10.1p1.do index 52b7461..fd356ee 100644 --- a/build/skel/security/openssh-10.1p1.do +++ b/build/skel/security/openssh-10.1p1.do @@ -12,6 +12,7 @@ $TAR xf "$DISTFILES"/$NAME.tar.gz "$BASS_ROOT"/bin/rm-r "$SKELBINS"/$ARCH/$NAME-$hsh cd $NAME +patch <"$BASS_ROOT"/build/skel/security/openssh-10.1p1-tty-fix.patch >&2 ./configure --prefix="$SKELBINS"/$ARCH/$NAME-$hsh \ --disable-security-key \ --disable-pkcs11 \ -- 2.51.0