[openssh-commits] [openssh] 03/03: upstream: don't start the ObscureKeystrokeTiming mitigations if

git+noreply at mindrot.org git+noreply at mindrot.org
Mon Oct 14 09:21:15 AEDT 2024


This is an automated email from the git hooks/post-receive script.

djm pushed a commit to branch master
in repository openssh.

commit fe6c6330c1a94c7a537efe9069853ce7a275c50a
Author: djm at openbsd.org <djm at openbsd.org>
AuthorDate: Sun Oct 13 22:20:06 2024 +0000

    upstream: don't start the ObscureKeystrokeTiming mitigations if
    
    there has been traffic on a X11 forwarding channel recently.
    
    Should fix X11 forwarding performance problems when this setting is
    enabled. Patch from Antonio Larrosa via bz3655
    
    OpenBSD-Commit-ID: 820284a92eb4592fcd3d181a62c1b86b08a4a7ab
---
 channels.c   | 21 ++++++++++++++++++++-
 channels.h   |  3 ++-
 clientloop.c |  7 ++++---
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/channels.c b/channels.c
index a23fde42..8ebe21c4 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.439 2024/07/25 22:40:08 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.440 2024/10/13 22:20:06 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo at cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo at cs.hut.fi>, Espoo, Finland
@@ -5336,3 +5336,22 @@ x11_request_forwarding_with_spoofing(struct ssh *ssh, int client_session_id,
 		fatal_fr(r, "send x11-req");
 	free(new_data);
 }
+
+/*
+ * Returns whether an x11 channel was used recently (less than a second ago)
+ */
+int
+x11_channel_used_recently(struct ssh *ssh) {
+	u_int i;
+	Channel *c;
+	time_t lastused = 0;
+
+	for (i = 0; i < ssh->chanctxt->channels_alloc; i++) {
+		c = ssh->chanctxt->channels[i];
+		if (c == NULL || c->ctype == NULL || c->lastused == 0 ||
+		    strcmp(c->ctype, "x11-connection") != 0)
+			continue;
+		lastused = c->lastused;
+	}
+	return lastused != 0 && monotime() > lastused + 1;
+}
diff --git a/channels.h b/channels.h
index 3ac5e837..134528d5 100644
--- a/channels.h
+++ b/channels.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.h,v 1.157 2024/07/25 22:40:08 djm Exp $ */
+/* $OpenBSD: channels.h,v 1.158 2024/10/13 22:20:06 djm Exp $ */
 
 /*
  * Author: Tatu Ylonen <ylo at cs.hut.fi>
@@ -382,6 +382,7 @@ int	 x11_connect_display(struct ssh *);
 int	 x11_create_display_inet(struct ssh *, int, int, int, u_int *, int **);
 void	 x11_request_forwarding_with_spoofing(struct ssh *, int,
 	    const char *, const char *, const char *, int);
+int      x11_channel_used_recently(struct ssh *ssh);
 
 /* channel close */
 
diff --git a/clientloop.c b/clientloop.c
index 8ed8b1c3..ccd70b5a 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: clientloop.c,v 1.408 2024/07/01 04:31:17 djm Exp $ */
+/* $OpenBSD: clientloop.c,v 1.409 2024/10/13 22:20:06 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo at cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo at cs.hut.fi>, Espoo, Finland
@@ -659,9 +659,10 @@ obfuscate_keystroke_timing(struct ssh *ssh, struct timespec *timeout,
 	if (just_started)
 		return 1;
 
-	/* Don't arm output fd for poll until the timing interval has elapsed */
+	/* Don't arm output fd for poll until the timing interval has elapsed... */
 	if (timespeccmp(&now, &next_interval, <))
-		return 0;
+		/* ...unless there's x11 communicattion happening */
+		return x11_channel_used_recently(ssh);
 
 	/* Calculate number of intervals missed since the last check */
 	n = (now.tv_sec - next_interval.tv_sec) * 1000LL * 1000 * 1000;

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list