Module Name: xsrc
Committed By: mrg
Date: Sat Oct 28 18:44:38 UTC 2023
Modified Files:
xsrc/external/mit/xorg-server.old/dist/Xi: xiproperty.c
xsrc/external/mit/xorg-server.old/dist/dix: enterleave.h
xsrc/external/mit/xorg-server.old/dist/include: eventstr.h
xsrc/external/mit/xorg-server.old/dist/mi: mipointer.c
xsrc/external/mit/xorg-server.old/dist/os: auth.c
xsrc/external/mit/xorg-server.old/dist/randr: rrproperty.c
Log Message:
merge security fixes from xorg-server 21.1.9 into xorg-server 10.
Fixes CVE-2023-5367 and CVE-2023-5380.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xorg-server.old/dist/include/eventstr.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xorg-server.old/dist/os/auth.c
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c
diff -u xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c:1.1.1.1 xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c:1.2
--- xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c:1.1.1.1 Thu Jun 9 09:07:56 2016
+++ xsrc/external/mit/xorg-server.old/dist/Xi/xiproperty.c Sat Oct 28 18:44:37 2023
@@ -753,7 +753,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev
XIDestroyDeviceProperty (prop);
return BadAlloc;
}
- new_value.size = len;
+ new_value.size = total_len;
new_value.type = type;
new_value.format = format;
@@ -770,7 +770,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev
case PropModePrepend:
new_data = new_value.data;
old_data = (pointer) (((char *) new_value.data) +
- (prop_value->size * size_in_bytes));
+ (len * size_in_bytes));
break;
}
if (new_data)
Index: xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h
diff -u xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h:1.1.1.1 xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h:1.2
--- xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h:1.1.1.1 Thu Jun 9 09:07:56 2016
+++ xsrc/external/mit/xorg-server.old/dist/dix/enterleave.h Sat Oct 28 18:44:37 2023
@@ -76,8 +76,6 @@ extern void EnterWindow(DeviceIntPtr dev
WindowPtr win,
int mode);
-extern void LeaveWindow(DeviceIntPtr dev);
-
extern void CoreFocusEvent(DeviceIntPtr kbd,
int type,
int mode,
Index: xsrc/external/mit/xorg-server.old/dist/include/eventstr.h
diff -u xsrc/external/mit/xorg-server.old/dist/include/eventstr.h:1.1.1.1 xsrc/external/mit/xorg-server.old/dist/include/eventstr.h:1.2
--- xsrc/external/mit/xorg-server.old/dist/include/eventstr.h:1.1.1.1 Thu Jun 9 09:08:00 2016
+++ xsrc/external/mit/xorg-server.old/dist/include/eventstr.h Sat Oct 28 18:44:37 2023
@@ -243,4 +243,7 @@ union _InternalEvent {
#endif
};
+extern void
+LeaveWindow(DeviceIntPtr dev);
+
#endif
Index: xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c
diff -u xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c:1.1.1.1 xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c:1.2
--- xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c:1.1.1.1 Thu Jun 9 09:08:00 2016
+++ xsrc/external/mit/xorg-server.old/dist/mi/mipointer.c Sat Oct 28 18:44:38 2023
@@ -41,6 +41,8 @@ in this Software without prior written a
# include "inputstr.h"
# include "inpututils.h"
+# include "eventstr.h"
+
DevPrivateKeyRec miPointerScreenKeyRec;
#define GetScreenPrivate(s) ((miPointerScreenPtr) \
@@ -318,8 +320,21 @@ miPointerWarpCursor (DeviceIntPtr pDev,
#ifdef PANORAMIX
&& noPanoramiXExtension
#endif
- )
- UpdateSpriteForScreen (pDev, pScreen) ;
+ ) {
+ DeviceIntPtr master = GetMaster(pDev, MASTER_POINTER);
+ /* Hack for CVE-2023-5380: if we're moving
+ * screens PointerWindows[] keeps referring to the
+ * old window. If that gets destroyed we have a UAF
+ * bug later. Only happens when jumping from a window
+ * to the root window on the other screen.
+ * Enter/Leave events are incorrect for that case but
+ * too niche to fix.
+ */
+ LeaveWindow(pDev);
+ if (master)
+ LeaveWindow(master);
+ UpdateSpriteForScreen(pDev, pScreen);
+ }
}
/*
Index: xsrc/external/mit/xorg-server.old/dist/os/auth.c
diff -u xsrc/external/mit/xorg-server.old/dist/os/auth.c:1.3 xsrc/external/mit/xorg-server.old/dist/os/auth.c:1.4
--- xsrc/external/mit/xorg-server.old/dist/os/auth.c:1.3 Wed Mar 8 07:44:16 2017
+++ xsrc/external/mit/xorg-server.old/dist/os/auth.c Sat Oct 28 18:44:38 2023
@@ -45,9 +45,7 @@ from The Open Group.
#ifdef WIN32
#include <X11/Xw32defs.h>
#endif
-#ifdef HAVE_LIBBSD
-#include <bsd/stdlib.h> /* for arc4random_buf() */
-#endif
+#include <stdlib.h> /* for arc4random_buf() */
struct protocol {
unsigned short name_length;
Index: xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c
diff -u xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c:1.1.1.1 xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c:1.2
--- xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c:1.1.1.1 Thu Jun 9 09:08:01 2016
+++ xsrc/external/mit/xorg-server.old/dist/randr/rrproperty.c Sat Oct 28 18:44:38 2023
@@ -190,7 +190,7 @@ RRChangeOutputProperty (RROutputPtr outp
RRDestroyOutputProperty (prop);
return BadAlloc;
}
- new_value.size = len;
+ new_value.size = total_len;
new_value.type = type;
new_value.format = format;
@@ -207,7 +207,7 @@ RRChangeOutputProperty (RROutputPtr outp
case PropModePrepend:
new_data = new_value.data;
old_data = (pointer) (((char *) new_value.data) +
- (prop_value->size * size_in_bytes));
+ (len * size_in_bytes));
break;
}
if (new_data)