summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordtucker@openbsd.org <dtucker@openbsd.org>2024-12-05 07:47:00 +0100
committerDarren Tucker <dtucker@dtucker.net>2024-12-05 09:13:42 +0100
commit9998c93d57bf0f1df2bc93e0bc2d8112c6f8c720 (patch)
tree5ca243d7e93e39e9fa74667f8d9ead468f7aaba7
parentupstream: add a work-in-progress tool to verify FIDO attestation (diff)
downloadopenssh-9998c93d57bf0f1df2bc93e0bc2d8112c6f8c720.tar.xz
openssh-9998c93d57bf0f1df2bc93e0bc2d8112c6f8c720.zip
upstream: Prevent integer overflow in x11 port handling. These are
theoretically possible if the admin misconfigures X11DisplayOffset or the user misconfigures their own $DISPLAY, but don't happen in normal operation. From Suhov Roman via bz#3730, ok djm@ OpenBSD-Commit-ID: e9e3860f1a19b862ccf07dc8ecbe8f1e1034f4ed
-rw-r--r--channels.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/channels.c b/channels.c
index 8ebe21c40..1a95301e7 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.440 2024/10/13 22:20:06 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.441 2024/12/05 06:47:00 dtucker Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -4998,13 +4998,13 @@ x11_create_display_inet(struct ssh *ssh, int x11_display_offset,
u_int *display_numberp, int **chanids)
{
Channel *nc = NULL;
- int display_number, sock;
- u_short port;
+ int display_number, sock, port;
struct addrinfo hints, *ai, *aitop;
char strport[NI_MAXSERV];
int gaierr, n, num_socks = 0, socks[NUM_SOCKS];
- if (chanids == NULL)
+ if (chanids == NULL || x11_display_offset < 0 ||
+ x11_display_offset > UINT16_MAX - 6000 - MAX_DISPLAYS)
return -1;
for (display_number = x11_display_offset;
@@ -5226,7 +5226,8 @@ x11_connect_display(struct ssh *ssh)
* buf now contains the host name. But first we parse the
* display number.
*/
- if (sscanf(cp + 1, "%u", &display_number) != 1) {
+ if (sscanf(cp + 1, "%u", &display_number) != 1 ||
+ display_number > UINT16_MAX - 6000) {
error("Could not parse display number from DISPLAY: %.100s",
display);
return -1;