summaryrefslogtreecommitdiffstats
path: root/patches/source/xorg-server/patch/xorg-server
diff options
context:
space:
mode:
Diffstat (limited to 'patches/source/xorg-server/patch/xorg-server')
-rw-r--r--patches/source/xorg-server/patch/xorg-server/x11.startwithblackscreen.diff13
-rw-r--r--patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2010-2240.diff130
-rw-r--r--patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2013-4396.diff42
-rw-r--r--patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10971.diff21
-rw-r--r--patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10972.diff36
5 files changed, 242 insertions, 0 deletions
diff --git a/patches/source/xorg-server/patch/xorg-server/x11.startwithblackscreen.diff b/patches/source/xorg-server/patch/xorg-server/x11.startwithblackscreen.diff
new file mode 100644
index 000000000..bfa9c305d
--- /dev/null
+++ b/patches/source/xorg-server/patch/xorg-server/x11.startwithblackscreen.diff
@@ -0,0 +1,13 @@
+--- ./dix/window.c.orig 2007-01-22 23:39:15.000000000 -0600
++++ ./dix/window.c 2007-02-14 03:21:03.000000000 -0600
+@@ -140,8 +140,8 @@
+ *
+ ******/
+
+-static unsigned char _back_lsb[4] = {0x88, 0x22, 0x44, 0x11};
+-static unsigned char _back_msb[4] = {0x11, 0x44, 0x22, 0x88};
++static unsigned char _back_lsb[4] = {0x00, 0x00, 0x00, 0x00};
++static unsigned char _back_msb[4] = {0x00, 0x00, 0x00, 0x00};
+
+ _X_EXPORT int screenIsSaved = SCREEN_SAVER_OFF;
+
diff --git a/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2010-2240.diff b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2010-2240.diff
new file mode 100644
index 000000000..b4d2f0956
--- /dev/null
+++ b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2010-2240.diff
@@ -0,0 +1,130 @@
+--- ./os/utils.c.orig 2009-07-07 12:48:58.000000000 -0500
++++ ./os/utils.c 2010-08-26 15:54:46.000000000 -0500
+@@ -58,6 +58,36 @@
+ #include <signal.h>
+ #endif
+
++/*
++ * issetugid()
++ *
++ * Copyright (C) - 2007 Robert Connolly
++ *
++ * Permission to reproduce, copy, delete, distribute, transmit, use, modify,
++ * build upon or otherwise exploit this software, in any form, for any
++ * purpose, in any way, and by anyone, including by methods that have not
++ * yet been invented or conceived, is hereby granted.
++ */
++#include <unistd.h>
++extern int __libc_enable_secure;
++int issetugid(void)
++{
++ if (__libc_enable_secure)
++ {
++ return 1;
++ }
++ if (getuid() != geteuid())
++ {
++ return 1;
++ }
++ if (getgid() != getegid())
++ {
++ return 1;
++ }
++ /* Else */
++ return 0;
++}
++
+ #if defined(WIN32) && !defined(__CYGWIN__)
+ #include <X11/Xwinsock.h>
+ #endif
+@@ -761,6 +791,22 @@
+ UseMsg();
+ }
+ #endif
++/* #ifdef RLIMIT_AS
++ else if ( strcmp( argv[i], "-la") == 0)
++ {
++ if (getuid() != 0 && issetugid()) {
++ FatalError("The '-la' option can only be used by root.\n");
++ }
++ if(++i < argc)
++ {
++ limitAddressSpace = atol(argv[i]);
++ if (limitAddressSpace > 0)
++ limitAddressSpace *= 1024;
++ }
++ else
++ UseMsg();
++ }
++#endif */
+ #ifdef SERVER_LOCK
+ else if ( strcmp ( argv[i], "-nolock") == 0)
+ {
+--- ./os/osinit.c.orig 2009-07-07 12:48:58.000000000 -0500
++++ ./os/osinit.c 2010-08-26 15:27:45.000000000 -0500
+@@ -99,6 +99,14 @@
+ #ifdef macII
+ set42sig();
+ #endif
++#ifdef RLIMIT_AS
++#ifdef _XSERVER64
++#define XORG_AS_LIMIT 10737418240LL
++#else
++#define XORG_AS_LIMIT 1610612736
++#endif
++long limitAddressSpace = XORG_AS_LIMIT;
++#endif
+
+ if (!been_here) {
+ #if !defined(__SCO__) && !defined(__CYGWIN__) && !defined(__UNIXWARE__)
+@@ -187,6 +195,22 @@
+ }
+ }
+ #endif
++#ifdef RLIMIT_AS
++ if (limitAddressSpace >= 0)
++ {
++ struct rlimit rlim;
++
++ if (!getrlimit(RLIMIT_AS, &rlim))
++ {
++ if ((limitAddressSpace > 0)
++ && (limitAddressSpace < rlim.rlim_max))
++ rlim.rlim_cur = limitAddressSpace;
++ else
++ rlim.rlim_cur = rlim.rlim_max;
++ (void)setrlimit(RLIMIT_AS, &rlim);
++ }
++ }
++#endif
+ LockServer();
+ been_here = TRUE;
+ }
+--- ./include/opaque.h.orig 2009-07-07 12:48:58.000000000 -0500
++++ ./include/opaque.h 2010-08-26 15:49:31.000000000 -0500
+@@ -67,6 +67,9 @@
+ #ifdef RLIMIT_NOFILE
+ extern int limitNoFile;
+ #endif
++#ifdef RLIMIT_AS
++extern long limitAddressSpace;
++#endif
+ extern Bool defeatAccessControl;
+ extern long maxBigRequestSize;
+ extern Bool party_like_its_1989;
+--- ./doc/Xserver.man.pre.orig 2009-07-07 12:48:58.000000000 -0500
++++ ./doc/Xserver.man.pre 2010-08-26 15:27:45.000000000 -0500
+@@ -293,6 +293,13 @@
+ A value of zero makes the stack size as large as possible. The default value
+ of \-1 leaves the stack space limit unchanged.
+ .TP 8
++.B \-la \fIkilobytes\fP
++sets the address space limit of the server to the specified number of
++kilobytes.
++A value of zero makes address space as large as possible.
++The default value is 1572864 (1.5GB) on 32 bit architectures and
++10485760 (10GB) on 64 bit architectures.
++.TP 8
+ .B \-logo
+ turns on the X Window System logo display in the screen-saver.
+ There is currently no way to change this from a client.
diff --git a/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2013-4396.diff b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2013-4396.diff
new file mode 100644
index 000000000..d176b8462
--- /dev/null
+++ b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2013-4396.diff
@@ -0,0 +1,42 @@
+--- ./dix/dixfonts.c.orig 2009-07-07 12:48:57.000000000 -0500
++++ ./dix/dixfonts.c 2013-10-09 21:49:12.126761613 -0500
+@@ -1512,6 +1512,7 @@
+ GC *pGC;
+ unsigned char *data;
+ ITclosurePtr new_closure;
++ ITclosurePtr old_closure;
+
+ /* We're putting the client to sleep. We need to
+ save some state. Similar problem to that handled
+@@ -1524,6 +1525,7 @@
+ err = BadAlloc;
+ goto bail;
+ }
++ old_closure = c;
+ *new_closure = *c;
+ c = new_closure;
+
+@@ -1531,6 +1533,7 @@
+ if (!data)
+ {
+ xfree(c);
++ c = old_closure;
+ err = BadAlloc;
+ goto bail;
+ }
+@@ -1542,6 +1545,7 @@
+ {
+ xfree(c->data);
+ xfree(c);
++ c = old_closure;
+ err = BadAlloc;
+ goto bail;
+ }
+@@ -1555,6 +1559,7 @@
+ FreeScratchGC(pGC);
+ xfree(c->data);
+ xfree(c);
++ c = old_closure;
+ err = BadAlloc;
+ goto bail;
+ }
diff --git a/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10971.diff b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10971.diff
new file mode 100644
index 000000000..25f09ee1a
--- /dev/null
+++ b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10971.diff
@@ -0,0 +1,21 @@
+--- ./Xi/sendexev.c.orig 2010-04-30 04:26:35.000000000 -0500
++++ ./Xi/sendexev.c 2017-08-15 14:58:25.709950954 -0500
+@@ -95,9 +95,17 @@
+
+ eventP = (xEvent *) & stuff[1];
+ for (i = 0; i < stuff->num_events; i++, eventP++) {
++ if (eventP->u.u.type == GenericEvent) {
++ client->errorValue = eventP->u.u.type;
++ return BadValue;
++ }
++
+ proc = EventSwapVector[eventP->u.u.type & 0177];
+- if (proc == NotImplemented) /* no swapping proc; invalid event type? */
++ /* no swapping proc; invalid event type? */
++ if (proc == NotImplemented) {
++ client->errorValue = eventP->u.u.type;
+ return (BadValue);
++ }
+ (*proc) (eventP, &eventT);
+ *eventP = eventT;
+ }
diff --git a/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10972.diff b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10972.diff
new file mode 100644
index 000000000..edddc8d66
--- /dev/null
+++ b/patches/source/xorg-server/patch/xorg-server/xorg-server.CVE-2017-10972.diff
@@ -0,0 +1,36 @@
+From 05442de962d3dc624f79fc1a00eca3ffc5489ced Mon Sep 17 00:00:00 2001
+From: Michal Srb <msrb@suse.com>
+Date: Wed, 24 May 2017 15:54:39 +0300
+Subject: Xi: Zero target buffer in SProcXSendExtensionEvent.
+
+Make sure that the xEvent eventT is initialized with zeros, the same way as
+in SProcSendEvent.
+
+Some event swapping functions do not overwrite all 32 bytes of xEvent
+structure, for example XSecurityAuthorizationRevoked. Two cooperating
+clients, one swapped and the other not, can send
+XSecurityAuthorizationRevoked event to each other to retrieve old stack data
+from X server. This can be potentialy misused to go around ASLR or
+stack-protector.
+
+Signed-off-by: Michal Srb <msrb@suse.com>
+Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+diff --git a/Xi/sendexev.c b/Xi/sendexev.c
+index 11d8202..1cf118a 100644
+--- a/Xi/sendexev.c
++++ b/Xi/sendexev.c
+@@ -78,7 +78,7 @@ SProcXSendExtensionEvent(ClientPtr client)
+ {
+ CARD32 *p;
+ int i;
+- xEvent eventT;
++ xEvent eventT = { .u.u.type = 0 };
+ xEvent *eventP;
+ EventSwapPtr proc;
+
+--
+cgit v0.10.2
+
+