diff options
author | djm@openbsd.org <djm@openbsd.org> | 2023-11-15 22:51:49 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2023-11-16 09:53:42 +1100 |
commit | 050c335c8da43741ed0df2570ebfbd5d1dfd0a31 (patch) | |
tree | 825e2a081e5716f56398ceaf8c5c30a1d3840426 | |
parent | 676377ce67807a24e08a54cd60ec832946cc6cae (diff) | |
download | openssh-050c335c8da43741ed0df2570ebfbd5d1dfd0a31.tar.gz |
upstream: when deciding whether to enable keystroke timing
obfuscation, only consider enabling it when a channel with a tty is open.
Avoids turning on the obfucation when X11 forwarding only is in use,
which slows it right down. Reported by Roger Marsh
OpenBSD-Commit-ID: c292f738db410f729190f92de100c39ec931a4f1
-rw-r--r-- | channels.c | 19 | ||||
-rw-r--r-- | channels.h | 3 | ||||
-rw-r--r-- | clientloop.c | 4 |
3 files changed, 22 insertions, 4 deletions
diff --git a/channels.c b/channels.c index 598ff322a..38135e5ad 100644 --- a/channels.c +++ b/channels.c @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.c,v 1.433 2023/09/04 00:01:46 djm Exp $ */ +/* $OpenBSD: channels.c,v 1.434 2023/11/15 22:51:49 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -898,6 +898,23 @@ channel_still_open(struct ssh *ssh) return 0; } +/* Returns true if a channel with a TTY is open. */ +int +channel_tty_open(struct ssh *ssh) +{ + u_int i; + Channel *c; + + for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { + c = ssh->chanctxt->channels[i]; + if (c == NULL || c->type != SSH_CHANNEL_OPEN) + continue; + if (c->client_tty) + return 1; + } + return 0; +} + /* Returns the id of an open channel suitable for keepaliving */ int channel_find_open(struct ssh *ssh) diff --git a/channels.h b/channels.h index 58019a84e..3054b04df 100644 --- a/channels.h +++ b/channels.h @@ -1,4 +1,4 @@ -/* $OpenBSD: channels.h,v 1.152 2023/09/04 00:01:46 djm Exp $ */ +/* $OpenBSD: channels.h,v 1.153 2023/11/15 22:51:49 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> @@ -340,6 +340,7 @@ int channel_output_poll(struct ssh *); int channel_not_very_much_buffered_data(struct ssh *); void channel_close_all(struct ssh *); int channel_still_open(struct ssh *); +int channel_tty_open(struct ssh *); const char *channel_format_extended_usage(const Channel *); char *channel_open_message(struct ssh *); int channel_find_open(struct ssh *); diff --git a/clientloop.c b/clientloop.c index 8e323a600..c5a924092 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.400 2023/10/12 02:12:53 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.401 2023/11/15 22:51:49 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -589,7 +589,7 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout, if (options.obscure_keystroke_timing_interval <= 0) return 1; /* disabled in config */ - if (!channel_still_open(ssh) || quit_pending) { + if (!channel_tty_open(ssh) || quit_pending) { /* Stop if no channels left of we're waiting for one to close */ stop_reason = "no active channels"; } else if (ssh_packet_is_rekeying(ssh)) { |