xorg-x11-server package is retired on branch c10s for CS-2432
This commit is contained in:
parent
9e2cf9b52a
commit
1ead4bd630
37
.gitignore
vendored
37
.gitignore
vendored
@ -1,37 +0,0 @@
|
||||
xorg-server-1.9.1.tar.bz2
|
||||
/xorg-server-20101125.tar.xz
|
||||
/xorg-server-20101201.tar.xz
|
||||
/xorg-server-1.10.0.tar.bz2
|
||||
/xorg-server-20110418.tar.xz
|
||||
/xorg-server-20110510.tar.xz
|
||||
/xorg-server-20110818.tar.xz
|
||||
/xorg-server-1.11.0.tar.bz2
|
||||
/xorg-server-1.11.1.tar.bz2
|
||||
/xorg-server-20111109.tar.xz
|
||||
/xorg-server-20120103.tar.xz
|
||||
/xorg-server-20120124.tar.xz
|
||||
/xorg-server-20120215.tar.xz
|
||||
/xorg-server-1.12.0.tar.bz2
|
||||
/xorg-server-1.12.1.tar.bz2
|
||||
/xorg-server-1.12.2.tar.bz2
|
||||
/xorg-server-1.12.3.tar.bz2
|
||||
/xorg-server-20120717.tar.xz
|
||||
/xorg-server-20120726.tar.xz
|
||||
/xorg-server-20120808.tar.xz
|
||||
/xorg-server-20120822.tar.xz
|
||||
/xorg-server-1.13.0.tar.bz2
|
||||
/xorg-server-1.13.1.tar.bz2
|
||||
/xorg-server-20130109.tar.xz
|
||||
/xorg-server-20130215.tar.xz
|
||||
/xorg-server-1.14.0.tar.bz2
|
||||
/xorg-server-1.14.1.tar.bz2
|
||||
/xorg-server-1.14.1.901.tar.bz2
|
||||
/xorg-server-1.14.2.tar.bz2
|
||||
/xorg-server-1.14.3.tar.bz2
|
||||
/xorg-server-1.14.99.3.tar.bz2
|
||||
/xorg-server-1.14.99.901.tar.bz2
|
||||
/xorg-server-1.14.99.902.tar.bz2
|
||||
*.bz2
|
||||
*.xz
|
||||
/xorg-x11-server-1.15.0-1.fc21.src.rpm
|
||||
/xorg-server-1.20.14.tar.gz
|
@ -1,272 +0,0 @@
|
||||
From 73d6e888c6058b28a0e87ab65aa4172b17d8327d Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Mon, 19 Dec 2022 10:34:29 +1000
|
||||
Subject: [PATCH xserver] Fix some indentation issues
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
dix/dispatch.c | 22 +++++++++++-----------
|
||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/dix/dispatch.c b/dix/dispatch.c
|
||||
index 210df75c63..e38a8fecaa 100644
|
||||
--- a/dix/dispatch.c
|
||||
+++ b/dix/dispatch.c
|
||||
@@ -492,10 +492,10 @@ Dispatch(void)
|
||||
if (!WaitForSomething(clients_are_ready()))
|
||||
continue;
|
||||
|
||||
- /*****************
|
||||
- * Handle events in round robin fashion, doing input between
|
||||
- * each round
|
||||
- *****************/
|
||||
+ /*****************
|
||||
+ * Handle events in round robin fashion, doing input between
|
||||
+ * each round
|
||||
+ *****************/
|
||||
|
||||
if (!dispatchException && clients_are_ready()) {
|
||||
client = SmartScheduleClient();
|
||||
@@ -3657,11 +3657,11 @@ ProcInitialConnection(ClientPtr client)
|
||||
prefix = (xConnClientPrefix *) ((char *)stuff + sz_xReq);
|
||||
order = prefix->byteOrder;
|
||||
if (order != 'l' && order != 'B' && order != 'r' && order != 'R')
|
||||
- return client->noClientException = -1;
|
||||
+ return client->noClientException = -1;
|
||||
if (((*(char *) &whichbyte) && (order == 'B' || order == 'R')) ||
|
||||
- (!(*(char *) &whichbyte) && (order == 'l' || order == 'r'))) {
|
||||
- client->swapped = TRUE;
|
||||
- SwapConnClientPrefix(prefix);
|
||||
+ (!(*(char *) &whichbyte) && (order == 'l' || order == 'r'))) {
|
||||
+ client->swapped = TRUE;
|
||||
+ SwapConnClientPrefix(prefix);
|
||||
}
|
||||
stuff->reqType = 2;
|
||||
stuff->length += bytes_to_int32(prefix->nbytesAuthProto) +
|
||||
@@ -3670,7 +3670,7 @@ ProcInitialConnection(ClientPtr client)
|
||||
swaps(&stuff->length);
|
||||
}
|
||||
if (order == 'r' || order == 'R') {
|
||||
- client->local = FALSE;
|
||||
+ client->local = FALSE;
|
||||
}
|
||||
ResetCurrentRequest(client);
|
||||
return Success;
|
||||
@@ -3781,8 +3781,8 @@ ProcEstablishConnection(ClientPtr client)
|
||||
auth_string = auth_proto + pad_to_int32(prefix->nbytesAuthProto);
|
||||
|
||||
if ((client->req_len << 2) != sz_xReq + sz_xConnClientPrefix +
|
||||
- pad_to_int32(prefix->nbytesAuthProto) +
|
||||
- pad_to_int32(prefix->nbytesAuthString))
|
||||
+ pad_to_int32(prefix->nbytesAuthProto) +
|
||||
+ pad_to_int32(prefix->nbytesAuthString))
|
||||
reason = "Bad length";
|
||||
else if ((prefix->majorVersion != X_PROTOCOL) ||
|
||||
(prefix->minorVersion != X_PROTOCOL_REVISION))
|
||||
--
|
||||
2.39.0
|
||||
|
||||
From f69280ddcdd3115ee4717f22e85e0f43569b60dd Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue, 20 Dec 2022 11:40:16 +1000
|
||||
Subject: [PATCH xserver] dix: localize two variables
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
dix/dispatch.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dix/dispatch.c b/dix/dispatch.c
|
||||
index c651c3d887..92be773e6c 100644
|
||||
--- a/dix/dispatch.c
|
||||
+++ b/dix/dispatch.c
|
||||
@@ -3766,14 +3766,11 @@ int
|
||||
ProcEstablishConnection(ClientPtr client)
|
||||
{
|
||||
const char *reason;
|
||||
- char *auth_proto, *auth_string;
|
||||
xConnClientPrefix *prefix;
|
||||
|
||||
REQUEST(xReq);
|
||||
|
||||
prefix = (xConnClientPrefix *) ((char *) stuff + sz_xReq);
|
||||
- auth_proto = (char *) prefix + sz_xConnClientPrefix;
|
||||
- auth_string = auth_proto + pad_to_int32(prefix->nbytesAuthProto);
|
||||
|
||||
if ((client->req_len << 2) != sz_xReq + sz_xConnClientPrefix +
|
||||
pad_to_int32(prefix->nbytesAuthProto) +
|
||||
@@ -3782,12 +3779,15 @@ ProcEstablishConnection(ClientPtr client)
|
||||
else if ((prefix->majorVersion != X_PROTOCOL) ||
|
||||
(prefix->minorVersion != X_PROTOCOL_REVISION))
|
||||
reason = "Protocol version mismatch";
|
||||
- else
|
||||
+ else {
|
||||
+ char *auth_proto = (char *) prefix + sz_xConnClientPrefix;
|
||||
+ char *auth_string = auth_proto + pad_to_int32(prefix->nbytesAuthProto);
|
||||
reason = ClientAuthorized(client,
|
||||
(unsigned short) prefix->nbytesAuthProto,
|
||||
auth_proto,
|
||||
(unsigned short) prefix->nbytesAuthString,
|
||||
auth_string);
|
||||
+ }
|
||||
|
||||
return (SendConnSetup(client, reason));
|
||||
}
|
||||
--
|
||||
2.39.0
|
||||
|
||||
From 412777664a20dd3561b936c02c96571a756fe9b2 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue, 20 Dec 2022 10:42:03 +1000
|
||||
Subject: [PATCH xserver] Disallow byte-swapped clients by default
|
||||
|
||||
The X server swapping code is a huge attack surface, much of this code
|
||||
is untested and prone to security issues. The use-case of byte-swapped
|
||||
clients is very niche, so let's disable this by default and allow it
|
||||
only when the respective config option or commandline flag is given.
|
||||
|
||||
For Xorg, this adds the ServerFlag "AllowByteSwappedClients" "on".
|
||||
For all DDX, this adds the commandline options +byteswappedclients and
|
||||
-byteswappedclients to enable or disable, respectively.
|
||||
|
||||
Fixes #1201
|
||||
|
||||
https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1029
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
dix/dispatch.c | 4 +++-
|
||||
hw/xfree86/common/xf86Config.c | 8 ++++++++
|
||||
hw/xfree86/man/xorg.conf.man | 2 ++
|
||||
hw/xwayland/xwayland.pc.in | 1 +
|
||||
include/opaque.h | 2 ++
|
||||
man/Xserver.man | 6 ++++++
|
||||
os/utils.c | 9 +++++++++
|
||||
7 files changed, 31 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dix/dispatch.c b/dix/dispatch.c
|
||||
index 92be773e6c..9c26753a96 100644
|
||||
--- a/dix/dispatch.c
|
||||
+++ b/dix/dispatch.c
|
||||
@@ -3772,7 +3772,9 @@ ProcEstablishConnection(ClientPtr client)
|
||||
|
||||
prefix = (xConnClientPrefix *) ((char *) stuff + sz_xReq);
|
||||
|
||||
- if ((client->req_len << 2) != sz_xReq + sz_xConnClientPrefix +
|
||||
+ if (client->swapped && !AllowByteSwappedClients) {
|
||||
+ reason = "Prohibited client endianess, see the Xserver man page ";
|
||||
+ } else if ((client->req_len << 2) != sz_xReq + sz_xConnClientPrefix +
|
||||
pad_to_int32(prefix->nbytesAuthProto) +
|
||||
pad_to_int32(prefix->nbytesAuthString))
|
||||
reason = "Bad length";
|
||||
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
|
||||
index 5d814c1485..41acb25aa2 100644
|
||||
--- a/hw/xfree86/common/xf86Config.c
|
||||
+++ b/hw/xfree86/common/xf86Config.c
|
||||
@@ -646,6 +646,7 @@ typedef enum {
|
||||
FLAG_MAX_CLIENTS,
|
||||
FLAG_IGLX,
|
||||
FLAG_DEBUG,
|
||||
+ FLAG_ALLOW_BYTE_SWAPPED_CLIENTS,
|
||||
} FlagValues;
|
||||
|
||||
/**
|
||||
@@ -705,6 +706,8 @@ static OptionInfoRec FlagOptions[] = {
|
||||
{0}, FALSE},
|
||||
{FLAG_DEBUG, "Debug", OPTV_STRING,
|
||||
{0}, FALSE},
|
||||
+ {FLAG_ALLOW_BYTE_SWAPPED_CLIENTS, "AllowByteSwappedClients", OPTV_BOOLEAN,
|
||||
+ {0}, FALSE},
|
||||
{-1, NULL, OPTV_NONE,
|
||||
{0}, FALSE},
|
||||
};
|
||||
@@ -746,6 +749,11 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
|
||||
xf86Msg(X_CONFIG, "Ignoring ABI Version\n");
|
||||
}
|
||||
|
||||
+ xf86GetOptValBool(FlagOptions, FLAG_ALLOW_BYTE_SWAPPED_CLIENTS, &AllowByteSwappedClients);
|
||||
+ if (AllowByteSwappedClients) {
|
||||
+ xf86Msg(X_CONFIG, "Allowing byte-swapped clients\n");
|
||||
+ }
|
||||
+
|
||||
if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_ADD_DEVICES)) {
|
||||
xf86GetOptValBool(FlagOptions, FLAG_AUTO_ADD_DEVICES,
|
||||
&xf86Info.autoAddDevices);
|
||||
diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
|
||||
index 01b47247ee..d057f26ecd 100644
|
||||
--- a/hw/xfree86/man/xorg.conf.man
|
||||
+++ b/hw/xfree86/man/xorg.conf.man
|
||||
@@ -677,6 +677,8 @@ Possible values are
|
||||
or
|
||||
.BR sync .
|
||||
Unset by default.
|
||||
+.BI "Option \*qAllowByteSwappedClients\*q \*q" boolean \*q
|
||||
+Allow clients with a different byte-order than the server. Disabled by default.
|
||||
.SH "MODULE SECTION"
|
||||
The
|
||||
.B Module
|
||||
diff --git a/include/opaque.h b/include/opaque.h
|
||||
index 256261c2ad..398d4b4e51 100644
|
||||
--- a/include/opaque.h
|
||||
+++ b/include/opaque.h
|
||||
@@ -74,4 +74,6 @@ extern _X_EXPORT Bool bgNoneRoot;
|
||||
extern _X_EXPORT Bool CoreDump;
|
||||
extern _X_EXPORT Bool NoListenAll;
|
||||
|
||||
+extern _X_EXPORT Bool AllowByteSwappedClients;
|
||||
+
|
||||
#endif /* OPAQUE_H */
|
||||
diff --git a/man/Xserver.man b/man/Xserver.man
|
||||
index 764bd1d907..e7adf9eb35 100644
|
||||
--- a/man/Xserver.man
|
||||
+++ b/man/Xserver.man
|
||||
@@ -114,6 +114,12 @@ pattern. This is the default unless -retro or -wr is specified.
|
||||
.B \-bs
|
||||
disables backing store support on all screens.
|
||||
.TP 8
|
||||
+.B \+byteswappedclients
|
||||
+Allow connections from clients with an endianess different to that of the server.
|
||||
+.TP 8
|
||||
+.B \-byteswappedclients
|
||||
+Prohibit connections from clients with an endianess different to that of the server.
|
||||
+.TP 8
|
||||
.B \-c
|
||||
turns off key-click.
|
||||
.TP 8
|
||||
diff --git a/os/utils.c b/os/utils.c
|
||||
index fe94912f34..405bf7d8b4 100644
|
||||
--- a/os/utils.c
|
||||
+++ b/os/utils.c
|
||||
@@ -189,6 +189,8 @@ Bool CoreDump;
|
||||
|
||||
Bool enableIndirectGLX = FALSE;
|
||||
|
||||
+Bool AllowByteSwappedClients = FALSE;
|
||||
+
|
||||
#ifdef PANORAMIX
|
||||
Bool PanoramiXExtensionDisabledHack = FALSE;
|
||||
#endif
|
||||
@@ -523,6 +525,8 @@ UseMsg(void)
|
||||
ErrorF("-br create root window with black background\n");
|
||||
ErrorF("+bs enable any backing store support\n");
|
||||
ErrorF("-bs disable any backing store support\n");
|
||||
+ ErrorF("+byteswappedclients Allow clients with endianess different to that of the server\n");
|
||||
+ ErrorF("-byteswappedclients Prohibit clients with endianess different to that of the server\n");
|
||||
ErrorF("-c turns off key-click\n");
|
||||
ErrorF("c # key-click volume (0-100)\n");
|
||||
ErrorF("-cc int default color visual class\n");
|
||||
@@ -720,6 +724,11 @@ ProcessCommandLine(int argc, char *argv[])
|
||||
else
|
||||
UseMsg();
|
||||
}
|
||||
+ else if (strcmp(argv[i], "-byteswappedclients") == 0) {
|
||||
+ AllowByteSwappedClients = FALSE;
|
||||
+ } else if (strcmp(argv[i], "+byteswappedclients") == 0) {
|
||||
+ AllowByteSwappedClients = TRUE;
|
||||
+ }
|
||||
else if (strcmp(argv[i], "-br") == 0); /* default */
|
||||
else if (strcmp(argv[i], "+bs") == 0)
|
||||
enableBackingStore = TRUE;
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,135 +0,0 @@
|
||||
From 6497eeeb1a6552315132340565a3901d4db2144c Mon Sep 17 00:00:00 2001
|
||||
From: Boris-Barboris <ismailsiege@gmail.com>
|
||||
Date: Tue, 22 Jun 2021 00:51:08 +0300
|
||||
Subject: [PATCH] Don't hardcode fps for fake screen
|
||||
|
||||
Currently, when main hardware screen is powered-off,
|
||||
X server initializes fake screen's timer with
|
||||
1 second update interval.
|
||||
|
||||
Streaming software like Nomachine or Vnc, as well as
|
||||
desktop input automation suffers from it, since it
|
||||
will forever be stuck on 1 fps until the display is
|
||||
turned back on.
|
||||
|
||||
This commit adds command line option -fakescreenfps <int>
|
||||
that allows the user to change the default fake screen
|
||||
timer.
|
||||
|
||||
Signed-off-by: Baranin Alexander <ismailsiege@gmail.com>
|
||||
---
|
||||
man/Xserver.man | 3 +++
|
||||
os/utils.c | 12 ++++++++++++
|
||||
present/present.h | 2 ++
|
||||
present/present_fake.c | 28 ++++++++++++++++++----------
|
||||
4 files changed, 35 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/man/Xserver.man b/man/Xserver.man
|
||||
index 31ffb8c..b1a3f40 100644
|
||||
--- a/man/Xserver.man
|
||||
+++ b/man/Xserver.man
|
||||
@@ -169,6 +169,9 @@ sets default cursor font.
|
||||
.B \-fn \fIfont\fP
|
||||
sets the default font.
|
||||
.TP 8
|
||||
+.B \-fakescreenfps \fFps\fP
|
||||
+sets fake presenter screen default fps (allowable range: 1-600).
|
||||
+.TP 8
|
||||
.B \-fp \fIfontPath\fP
|
||||
sets the search path for fonts. This path is a comma separated list
|
||||
of directories which the X server searches for font databases.
|
||||
diff --git a/os/utils.c b/os/utils.c
|
||||
index 2ba1c80..721d4e9 100644
|
||||
--- a/os/utils.c
|
||||
+++ b/os/utils.c
|
||||
@@ -110,6 +110,8 @@ __stdcall unsigned long GetTickCount(void);
|
||||
|
||||
#include "picture.h"
|
||||
|
||||
+#include "present.h"
|
||||
+
|
||||
Bool noTestExtensions;
|
||||
|
||||
#ifdef COMPOSITE
|
||||
@@ -526,6 +528,7 @@ UseMsg(void)
|
||||
ErrorF
|
||||
("-deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs\n");
|
||||
ErrorF("-f # bell base (0-100)\n");
|
||||
+ ErrorF("-fakescreenfps # fake screen default fps (1-600)\n");
|
||||
ErrorF("-fc string cursor font\n");
|
||||
ErrorF("-fn string default font name\n");
|
||||
ErrorF("-fp string default font path\n");
|
||||
@@ -776,6 +779,15 @@ ProcessCommandLine(int argc, char *argv[])
|
||||
else
|
||||
UseMsg();
|
||||
}
|
||||
+ else if (strcmp(argv[i], "-fakescreenfps") == 0) {
|
||||
+ if (++i < argc) {
|
||||
+ FakeScreenFps = (uint32_t) atoi(argv[i]);
|
||||
+ if (FakeScreenFps < 1 || FakeScreenFps > 600)
|
||||
+ FatalError("fakescreenfps must be an integer in [1;600] range\n");
|
||||
+ }
|
||||
+ else
|
||||
+ UseMsg();
|
||||
+ }
|
||||
else if (strcmp(argv[i], "-fc") == 0) {
|
||||
if (++i < argc)
|
||||
defaultCursorFont = argv[i];
|
||||
diff --git a/present/present.h b/present/present.h
|
||||
index 3d0b972..e7cc50d 100644
|
||||
--- a/present/present.h
|
||||
+++ b/present/present.h
|
||||
@@ -190,4 +190,6 @@ present_register_complete_notify(present_complete_notify_proc proc);
|
||||
extern _X_EXPORT Bool
|
||||
present_can_window_flip(WindowPtr window);
|
||||
|
||||
+extern _X_EXPORT uint32_t FakeScreenFps;
|
||||
+
|
||||
#endif /* _PRESENT_H_ */
|
||||
diff --git a/present/present_fake.c b/present/present_fake.c
|
||||
index 2350638..d9ac598 100644
|
||||
--- a/present/present_fake.c
|
||||
+++ b/present/present_fake.c
|
||||
@@ -117,21 +117,29 @@ present_fake_queue_vblank(ScreenPtr screen,
|
||||
return Success;
|
||||
}
|
||||
|
||||
+uint32_t FakeScreenFps = 0;
|
||||
+
|
||||
void
|
||||
present_fake_screen_init(ScreenPtr screen)
|
||||
{
|
||||
+ uint32_t fake_fps;
|
||||
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
|
||||
|
||||
- /* For screens with hardware vblank support, the fake code
|
||||
- * will be used for off-screen windows and while screens are blanked,
|
||||
- * in which case we want a slow interval here
|
||||
- *
|
||||
- * Otherwise, pretend that the screen runs at 60Hz
|
||||
- */
|
||||
- if (screen_priv->info && screen_priv->info->get_crtc)
|
||||
- screen_priv->fake_interval = 1000000;
|
||||
- else
|
||||
- screen_priv->fake_interval = 16667;
|
||||
+ if (FakeScreenFps)
|
||||
+ fake_fps = FakeScreenFps;
|
||||
+ else {
|
||||
+ /* For screens with hardware vblank support, the fake code
|
||||
+ * will be used for off-screen windows and while screens are blanked,
|
||||
+ * in which case we want a large interval here: 1Hz
|
||||
+ *
|
||||
+ * Otherwise, pretend that the screen runs at 60Hz
|
||||
+ */
|
||||
+ if (screen_priv->info && screen_priv->info->get_crtc)
|
||||
+ fake_fps = 1;
|
||||
+ else
|
||||
+ fake_fps = 60;
|
||||
+ }
|
||||
+ screen_priv->fake_interval = 1000000 / fake_fps;
|
||||
}
|
||||
|
||||
void
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 38ae53c94a88c7bd5877c72a12582b60865e07ff Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Thu, 17 Apr 2014 15:50:44 +0200
|
||||
Subject: [PATCH] Fedora hack: Make the suid-root wrapper start the server with
|
||||
root rights
|
||||
|
||||
Do NOT upstream.
|
||||
|
||||
Since most display managers are not ready yet to start Xorg in way which will
|
||||
keep it working without root-rights, see:
|
||||
https://fedoraproject.org/wiki/Changes/XorgWithoutRootRights
|
||||
|
||||
Just keep starting X as root for now, but do it through the wrapper, by
|
||||
overriding the needs_root_rights = -1 (auto) default and setting it to 1.
|
||||
|
||||
We set a special environment variable when starting X in a way where root
|
||||
rights are not needed (from gdm and startx) and keep the upstream
|
||||
needs_root_rights = -1 (auto) default in that case.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
hw/xfree86/xorg-wrapper.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/hw/xfree86/xorg-wrapper.c b/hw/xfree86/xorg-wrapper.c
|
||||
index 4c37cfc..ae5d27f 100644
|
||||
--- a/hw/xfree86/xorg-wrapper.c
|
||||
+++ b/hw/xfree86/xorg-wrapper.c
|
||||
@@ -198,6 +198,9 @@ int main(int argc, char *argv[])
|
||||
int needs_root_rights = -1;
|
||||
char *const empty_envp[1] = { NULL, };
|
||||
|
||||
+ if (getenv("XORG_RUN_AS_USER_OK") == NULL)
|
||||
+ needs_root_rights = 1;
|
||||
+
|
||||
progname = argv[0];
|
||||
|
||||
parse_config(&allowed, &needs_root_rights);
|
||||
--
|
||||
2.4.3
|
||||
|
@ -1,45 +0,0 @@
|
||||
From 96798fc1967491c80a4d0c8d9e0a80586cb2152b Mon Sep 17 00:00:00 2001
|
||||
From: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Date: Fri, 22 Mar 2024 18:51:45 -0700
|
||||
Subject: [PATCH 1/4] Xi: ProcXIGetSelectedEvents needs to use unswapped length
|
||||
to send reply
|
||||
|
||||
CVE-2024-31080
|
||||
|
||||
Reported-by: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69762
|
||||
Fixes: 53e821ab4 ("Xi: add request processing for XIGetSelectedEvents.")
|
||||
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1463>
|
||||
---
|
||||
Xi/xiselectev.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
|
||||
index edcb8a0d3..ac1494987 100644
|
||||
--- a/Xi/xiselectev.c
|
||||
+++ b/Xi/xiselectev.c
|
||||
@@ -349,6 +349,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||
InputClientsPtr others = NULL;
|
||||
xXIEventMask *evmask = NULL;
|
||||
DeviceIntPtr dev;
|
||||
+ uint32_t length;
|
||||
|
||||
REQUEST(xXIGetSelectedEventsReq);
|
||||
REQUEST_SIZE_MATCH(xXIGetSelectedEventsReq);
|
||||
@@ -418,10 +419,12 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||
}
|
||||
}
|
||||
|
||||
+ /* save the value before SRepXIGetSelectedEvents swaps it */
|
||||
+ length = reply.length;
|
||||
WriteReplyToClient(client, sizeof(xXIGetSelectedEventsReply), &reply);
|
||||
|
||||
if (reply.num_masks)
|
||||
- WriteToClient(client, reply.length * 4, buffer);
|
||||
+ WriteToClient(client, length * 4, buffer);
|
||||
|
||||
free(buffer);
|
||||
return Success;
|
||||
--
|
||||
2.44.0
|
||||
|
@ -1,77 +0,0 @@
|
||||
From a7bda3080d2b44eae668cdcec7a93095385b9652 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue, 28 Nov 2023 15:19:04 +1000
|
||||
Subject: [PATCH xserver] Xi: allocate enough XkbActions for our buttons
|
||||
|
||||
button->xkb_acts is supposed to be an array sufficiently large for all
|
||||
our buttons, not just a single XkbActions struct. Allocating
|
||||
insufficient memory here means when we memcpy() later in
|
||||
XkbSetDeviceInfo we write into memory that wasn't ours to begin with,
|
||||
leading to the usual security ooopsiedaisies.
|
||||
|
||||
CVE-2023-6377, ZDI-CAN-22412, ZDI-CAN-22413
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
|
||||
(cherry picked from commit 0c1a93d319558fe3ab2d94f51d174b4f93810afd)
|
||||
---
|
||||
Xi/exevents.c | 12 ++++++------
|
||||
dix/devices.c | 10 ++++++++++
|
||||
2 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Xi/exevents.c b/Xi/exevents.c
|
||||
index dcd4efb3bc..54ea11a938 100644
|
||||
--- a/Xi/exevents.c
|
||||
+++ b/Xi/exevents.c
|
||||
@@ -611,13 +611,13 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
|
||||
}
|
||||
|
||||
if (from->button->xkb_acts) {
|
||||
- if (!to->button->xkb_acts) {
|
||||
- to->button->xkb_acts = calloc(1, sizeof(XkbAction));
|
||||
- if (!to->button->xkb_acts)
|
||||
- FatalError("[Xi] not enough memory for xkb_acts.\n");
|
||||
- }
|
||||
+ size_t maxbuttons = max(to->button->numButtons, from->button->numButtons);
|
||||
+ to->button->xkb_acts = xnfreallocarray(to->button->xkb_acts,
|
||||
+ maxbuttons,
|
||||
+ sizeof(XkbAction));
|
||||
+ memset(to->button->xkb_acts, 0, maxbuttons * sizeof(XkbAction));
|
||||
memcpy(to->button->xkb_acts, from->button->xkb_acts,
|
||||
- sizeof(XkbAction));
|
||||
+ from->button->numButtons * sizeof(XkbAction));
|
||||
}
|
||||
else {
|
||||
free(to->button->xkb_acts);
|
||||
diff --git a/dix/devices.c b/dix/devices.c
|
||||
index 5bf956ead4..15e46a9a5f 100644
|
||||
--- a/dix/devices.c
|
||||
+++ b/dix/devices.c
|
||||
@@ -2525,6 +2525,8 @@ RecalculateMasterButtons(DeviceIntPtr slave)
|
||||
|
||||
if (master->button && master->button->numButtons != maxbuttons) {
|
||||
int i;
|
||||
+ int last_num_buttons = master->button->numButtons;
|
||||
+
|
||||
DeviceChangedEvent event = {
|
||||
.header = ET_Internal,
|
||||
.type = ET_DeviceChanged,
|
||||
@@ -2535,6 +2537,14 @@ RecalculateMasterButtons(DeviceIntPtr slave)
|
||||
};
|
||||
|
||||
master->button->numButtons = maxbuttons;
|
||||
+ if (last_num_buttons < maxbuttons) {
|
||||
+ master->button->xkb_acts = xnfreallocarray(master->button->xkb_acts,
|
||||
+ maxbuttons,
|
||||
+ sizeof(XkbAction));
|
||||
+ memset(&master->button->xkb_acts[last_num_buttons],
|
||||
+ 0,
|
||||
+ (maxbuttons - last_num_buttons) * sizeof(XkbAction));
|
||||
+ }
|
||||
|
||||
memcpy(&event.buttons.names, master->button->labels, maxbuttons *
|
||||
sizeof(Atom));
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 7150ba655c0cc08fa6ded309b81265bb672f2869 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed, 25 Jan 2023 11:41:40 +1000
|
||||
Subject: [PATCH xserver] Xi: fix potential use-after-free in
|
||||
DeepCopyPointerClasses
|
||||
|
||||
CVE-2023-0494, ZDI-CAN 19596
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
Xi/exevents.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Xi/exevents.c b/Xi/exevents.c
|
||||
index 217baa9561..dcd4efb3bc 100644
|
||||
--- a/Xi/exevents.c
|
||||
+++ b/Xi/exevents.c
|
||||
@@ -619,8 +619,10 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
|
||||
memcpy(to->button->xkb_acts, from->button->xkb_acts,
|
||||
sizeof(XkbAction));
|
||||
}
|
||||
- else
|
||||
+ else {
|
||||
free(to->button->xkb_acts);
|
||||
+ to->button->xkb_acts = NULL;
|
||||
+ }
|
||||
|
||||
memcpy(to->button->labels, from->button->labels,
|
||||
from->button->numButtons * sizeof(Atom));
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,80 +0,0 @@
|
||||
From a31ba141824a7649e11f0ef7673718ce559d6337 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue, 3 Oct 2023 11:53:05 +1000
|
||||
Subject: [PATCH xserver 1/4] Xi/randr: fix handling of PropModeAppend/Prepend
|
||||
|
||||
The handling of appending/prepending properties was incorrect, with at
|
||||
least two bugs: the property length was set to the length of the new
|
||||
part only, i.e. appending or prepending N elements to a property with P
|
||||
existing elements always resulted in the property having N elements
|
||||
instead of N + P.
|
||||
|
||||
Second, when pre-pending a value to a property, the offset for the old
|
||||
values was incorrect, leaving the new property with potentially
|
||||
uninitalized values and/or resulting in OOB memory writes.
|
||||
For example, prepending a 3 element value to a 5 element property would
|
||||
result in this 8 value array:
|
||||
[N, N, N, ?, ?, P, P, P ] P, P
|
||||
^OOB write
|
||||
|
||||
The XI2 code is a copy/paste of the RandR code, so the bug exists in
|
||||
both.
|
||||
|
||||
CVE-2023-5367, ZDI-CAN-22153
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
Xi/xiproperty.c | 4 ++--
|
||||
randr/rrproperty.c | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
|
||||
index 6ec419e870..563c4f31a5 100644
|
||||
--- a/Xi/xiproperty.c
|
||||
+++ b/Xi/xiproperty.c
|
||||
@@ -730,7 +730,7 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type,
|
||||
XIDestroyDeviceProperty(prop);
|
||||
return BadAlloc;
|
||||
}
|
||||
- new_value.size = len;
|
||||
+ new_value.size = total_len;
|
||||
new_value.type = type;
|
||||
new_value.format = format;
|
||||
|
||||
@@ -747,7 +747,7 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type,
|
||||
case PropModePrepend:
|
||||
new_data = new_value.data;
|
||||
old_data = (void *) (((char *) new_value.data) +
|
||||
- (prop_value->size * size_in_bytes));
|
||||
+ (len * size_in_bytes));
|
||||
break;
|
||||
}
|
||||
if (new_data)
|
||||
diff --git a/randr/rrproperty.c b/randr/rrproperty.c
|
||||
index c2fb9585c6..25469f57b2 100644
|
||||
--- a/randr/rrproperty.c
|
||||
+++ b/randr/rrproperty.c
|
||||
@@ -209,7 +209,7 @@ RRChangeOutputProperty(RROutputPtr output, Atom property, Atom type,
|
||||
RRDestroyOutputProperty(prop);
|
||||
return BadAlloc;
|
||||
}
|
||||
- new_value.size = len;
|
||||
+ new_value.size = total_len;
|
||||
new_value.type = type;
|
||||
new_value.format = format;
|
||||
|
||||
@@ -226,7 +226,7 @@ RRChangeOutputProperty(RROutputPtr output, Atom property, Atom type,
|
||||
case PropModePrepend:
|
||||
new_data = new_value.data;
|
||||
old_data = (void *) (((char *) new_value.data) +
|
||||
- (prop_value->size * size_in_bytes));
|
||||
+ (len * size_in_bytes));
|
||||
break;
|
||||
}
|
||||
if (new_data)
|
||||
--
|
||||
2.41.0
|
||||
|
@ -1,52 +0,0 @@
|
||||
From 8dba686dc277d6d262ad0c77b4632a5b276697ba Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue, 29 Nov 2022 12:55:45 +1000
|
||||
Subject: [PATCH xserver 1/7] Xtest: disallow GenericEvents in
|
||||
XTestSwapFakeInput
|
||||
|
||||
XTestSwapFakeInput assumes all events in this request are
|
||||
sizeof(xEvent) and iterates through these in 32-byte increments.
|
||||
However, a GenericEvent may be of arbitrary length longer than 32 bytes,
|
||||
so any GenericEvent in this list would result in subsequent events to be
|
||||
misparsed.
|
||||
|
||||
Additional, the swapped event is written into a stack-allocated struct
|
||||
xEvent (size 32 bytes). For any GenericEvent longer than 32 bytes,
|
||||
swapping the event may thus smash the stack like an avocado on toast.
|
||||
|
||||
Catch this case early and return BadValue for any GenericEvent.
|
||||
Which is what would happen in unswapped setups anyway since XTest
|
||||
doesn't support GenericEvent.
|
||||
|
||||
CVE-2022-46340, ZDI-CAN 19265
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Acked-by: Olivier Fourdan <ofourdan@redhat.com>
|
||||
---
|
||||
Xext/xtest.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Xext/xtest.c b/Xext/xtest.c
|
||||
index bf27eb590b..2985a4ce6e 100644
|
||||
--- a/Xext/xtest.c
|
||||
+++ b/Xext/xtest.c
|
||||
@@ -502,10 +502,11 @@ XTestSwapFakeInput(ClientPtr client, xReq * req)
|
||||
|
||||
nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent);
|
||||
for (ev = (xEvent *) &req[1]; --nev >= 0; ev++) {
|
||||
+ int evtype = ev->u.u.type & 0x177;
|
||||
/* Swap event */
|
||||
- proc = EventSwapVector[ev->u.u.type & 0177];
|
||||
+ proc = EventSwapVector[evtype];
|
||||
/* no swapping proc; invalid event type? */
|
||||
- if (!proc || proc == NotImplemented) {
|
||||
+ if (!proc || proc == NotImplemented || evtype == GenericEvent) {
|
||||
client->errorValue = ev->u.u.type;
|
||||
return BadValue;
|
||||
}
|
||||
--
|
||||
2.38.1
|
||||
|
@ -1,30 +0,0 @@
|
||||
commit 39934a656a44722d16a80bf4db411c53e2d67b38 (HEAD -> master, origin/master, origin/HEAD)
|
||||
Author: Eric Curtin <ecurtin@redhat.com>
|
||||
Date: Fri Dec 16 11:10:12 2022 +0000
|
||||
|
||||
config: add a quirk for Apple Silicon appledrm
|
||||
|
||||
Xorg server does not correctly select the DCP for the display without a
|
||||
quirk on Apple Silicon.
|
||||
|
||||
Signed-off-by: Eric Curtin <ecurtin@redhat.com>
|
||||
Suggested-by: Hector Martin <marcan@marcan.st>
|
||||
|
||||
diff --git a/config/10-quirks.conf b/config/10-quirks.conf
|
||||
index 47907d82d..54dd908a7 100644
|
||||
--- a/config/10-quirks.conf
|
||||
+++ b/config/10-quirks.conf
|
||||
@@ -36,3 +36,13 @@ Section "InputClass"
|
||||
MatchDriver "evdev"
|
||||
Option "TypeName" "MOUSE"
|
||||
EndSection
|
||||
+
|
||||
+# https://bugzilla.redhat.com/show_bug.cgi?id=2152414
|
||||
+# Xorg server does not correctly select the DCP for the display without
|
||||
+# a quirk on Apple Silicon
|
||||
+Section "OutputClass"
|
||||
+ Identifier "appledrm"
|
||||
+ MatchDriver "apple"
|
||||
+ Driver "modesetting"
|
||||
+ Option "PrimaryGPU" "true"
|
||||
+EndSection
|
@ -1,293 +0,0 @@
|
||||
From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Mon, 2 Apr 2018 16:49:02 -0400
|
||||
Subject: [PATCH] autobind GPUs to the screen
|
||||
|
||||
This is a modified version of a patch we've been carry-ing in Fedora and
|
||||
RHEL for years now. This patch automatically adds secondary GPUs to the
|
||||
master as output sink / offload source making e.g. the use of
|
||||
slave-outputs just work, with requiring the user to manually run
|
||||
"xrandr --setprovideroutputsource" before he can hookup an external
|
||||
monitor to his hybrid graphics laptop.
|
||||
|
||||
There is one problem with this patch, which is why it was not upstreamed
|
||||
before. What to do when a secondary GPU gets detected really is a policy
|
||||
decission (e.g. one may want to autobind PCI GPUs but not USB ones) and
|
||||
as such should be under control of the Desktop Environment.
|
||||
|
||||
Unconditionally adding autobinding support to the xserver will result
|
||||
in races between the DE dealing with the hotplug of a secondary GPU
|
||||
and the server itself dealing with it.
|
||||
|
||||
However we've waited for years for any Desktop Environments to actually
|
||||
start doing some sort of autoconfiguration of secondary GPUs and there
|
||||
is still not a single DE dealing with this, so I believe that it is
|
||||
time to upstream this now.
|
||||
|
||||
To avoid potential future problems if any DEs get support for doing
|
||||
secondary GPU configuration themselves, the new autobind functionality
|
||||
is made optional. Since no DEs currently support doing this themselves it
|
||||
is enabled by default. When DEs grow support for doing this themselves
|
||||
they can disable the servers autobinding through the servers cmdline or a
|
||||
xorg.conf snippet.
|
||||
|
||||
Signed-off-by: Dave Airlie <airlied@gmail.com>
|
||||
[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream]
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
---
|
||||
hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++
|
||||
hw/xfree86/common/xf86Globals.c | 2 ++
|
||||
hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++
|
||||
hw/xfree86/common/xf86Priv.h | 1 +
|
||||
hw/xfree86/common/xf86Privstr.h | 1 +
|
||||
hw/xfree86/common/xf86platformBus.c | 4 ++++
|
||||
hw/xfree86/man/Xorg.man | 7 +++++++
|
||||
hw/xfree86/man/xorg.conf.man | 6 ++++++
|
||||
randr/randrstr.h | 3 +++
|
||||
randr/rrprovider.c | 22 ++++++++++++++++++++++
|
||||
10 files changed, 85 insertions(+)
|
||||
|
||||
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
|
||||
index 2c1d335..d7d7c2e 100644
|
||||
--- a/hw/xfree86/common/xf86Config.c
|
||||
+++ b/hw/xfree86/common/xf86Config.c
|
||||
@@ -643,6 +643,7 @@ typedef enum {
|
||||
FLAG_DRI2,
|
||||
FLAG_USE_SIGIO,
|
||||
FLAG_AUTO_ADD_GPU,
|
||||
+ FLAG_AUTO_BIND_GPU,
|
||||
FLAG_MAX_CLIENTS,
|
||||
FLAG_IGLX,
|
||||
FLAG_DEBUG,
|
||||
@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = {
|
||||
{0}, FALSE},
|
||||
{FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN,
|
||||
{0}, FALSE},
|
||||
+ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN,
|
||||
+ {0}, FALSE},
|
||||
{FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER,
|
||||
{0}, FALSE },
|
||||
{FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN,
|
||||
@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
|
||||
}
|
||||
xf86Msg(from, "%sutomatically adding GPU devices\n",
|
||||
xf86Info.autoAddGPU ? "A" : "Not a");
|
||||
+
|
||||
+ if (xf86AutoBindGPUDisabled) {
|
||||
+ xf86Info.autoBindGPU = FALSE;
|
||||
+ from = X_CMDLINE;
|
||||
+ }
|
||||
+ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) {
|
||||
+ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU,
|
||||
+ &xf86Info.autoBindGPU);
|
||||
+ from = X_CONFIG;
|
||||
+ }
|
||||
+ else {
|
||||
+ from = X_DEFAULT;
|
||||
+ }
|
||||
+ xf86Msg(from, "%sutomatically binding GPU devices\n",
|
||||
+ xf86Info.autoBindGPU ? "A" : "Not a");
|
||||
+
|
||||
/*
|
||||
* Set things up based on the config file information. Some of these
|
||||
* settings may be overridden later when the command line options are
|
||||
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
|
||||
index e890f05..7b27b4c 100644
|
||||
--- a/hw/xfree86/common/xf86Globals.c
|
||||
+++ b/hw/xfree86/common/xf86Globals.c
|
||||
@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = {
|
||||
#else
|
||||
.autoAddGPU = FALSE,
|
||||
#endif
|
||||
+ .autoBindGPU = TRUE,
|
||||
};
|
||||
|
||||
const char *xf86ConfigFile = NULL;
|
||||
@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE;
|
||||
Gamma xf86Gamma = { 0.0, 0.0, 0.0 };
|
||||
|
||||
Bool xf86AllowMouseOpenFail = FALSE;
|
||||
+Bool xf86AutoBindGPUDisabled = FALSE;
|
||||
|
||||
#ifdef XF86VIDMODE
|
||||
Bool xf86VidModeDisabled = FALSE;
|
||||
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
|
||||
index ea42ec9..ec255b6 100644
|
||||
--- a/hw/xfree86/common/xf86Init.c
|
||||
+++ b/hw/xfree86/common/xf86Init.c
|
||||
@@ -76,6 +76,7 @@
|
||||
#include "xf86DDC.h"
|
||||
#include "xf86Xinput.h"
|
||||
#include "xf86InPriv.h"
|
||||
+#include "xf86Crtc.h"
|
||||
#include "picturestr.h"
|
||||
#include "randrstr.h"
|
||||
#include "glxvndabi.h"
|
||||
@@ -237,6 +238,19 @@ xf86PrivsElevated(void)
|
||||
return PrivsElevated();
|
||||
}
|
||||
|
||||
+static void
|
||||
+xf86AutoConfigOutputDevices(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if (!xf86Info.autoBindGPU)
|
||||
+ return;
|
||||
+
|
||||
+ for (i = 0; i < xf86NumGPUScreens; i++)
|
||||
+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
|
||||
+ xf86ScrnToScreen(xf86Screens[0]));
|
||||
+}
|
||||
+
|
||||
static void
|
||||
TrapSignals(void)
|
||||
{
|
||||
@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
|
||||
for (i = 0; i < xf86NumGPUScreens; i++)
|
||||
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||
|
||||
+ xf86AutoConfigOutputDevices();
|
||||
+
|
||||
xf86VGAarbiterWrapFunctions();
|
||||
if (sigio_blocked)
|
||||
input_unlock();
|
||||
@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i)
|
||||
xf86Info.iglxFrom = X_CMDLINE;
|
||||
return 0;
|
||||
}
|
||||
+ if (!strcmp(argv[i], "-noautoBindGPU")) {
|
||||
+ xf86AutoBindGPUDisabled = TRUE;
|
||||
+ return 1;
|
||||
+ }
|
||||
|
||||
/* OS-specific processing */
|
||||
return xf86ProcessArgument(argc, argv, i);
|
||||
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
|
||||
index 4fe2b5f..6566622 100644
|
||||
--- a/hw/xfree86/common/xf86Priv.h
|
||||
+++ b/hw/xfree86/common/xf86Priv.h
|
||||
@@ -46,6 +46,7 @@
|
||||
extern _X_EXPORT const char *xf86ConfigFile;
|
||||
extern _X_EXPORT const char *xf86ConfigDir;
|
||||
extern _X_EXPORT Bool xf86AllowMouseOpenFail;
|
||||
+extern _X_EXPORT Bool xf86AutoBindGPUDisabled;
|
||||
|
||||
#ifdef XF86VIDMODE
|
||||
extern _X_EXPORT Bool xf86VidModeDisabled;
|
||||
diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
|
||||
index 21c2e1f..6c71863 100644
|
||||
--- a/hw/xfree86/common/xf86Privstr.h
|
||||
+++ b/hw/xfree86/common/xf86Privstr.h
|
||||
@@ -98,6 +98,7 @@ typedef struct {
|
||||
|
||||
Bool autoAddGPU;
|
||||
const char *debug;
|
||||
+ Bool autoBindGPU;
|
||||
} xf86InfoRec, *xf86InfoPtr;
|
||||
|
||||
/* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */
|
||||
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||
index cef47da..913a324 100644
|
||||
--- a/hw/xfree86/common/xf86platformBus.c
|
||||
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "Pci.h"
|
||||
#include "xf86platformBus.h"
|
||||
#include "xf86Config.h"
|
||||
+#include "xf86Crtc.h"
|
||||
|
||||
#include "randrstr.h"
|
||||
int platformSlotClaimed;
|
||||
@@ -665,6 +666,9 @@ xf86platformAddDevice(int index)
|
||||
}
|
||||
/* attach unbound to 0 protocol screen */
|
||||
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||
+ if (xf86Info.autoBindGPU)
|
||||
+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
|
||||
+ xf86ScrnToScreen(xf86Screens[0]));
|
||||
|
||||
RRResourcesChanged(xf86Screens[0]->pScreen);
|
||||
RRTellChanged(xf86Screens[0]->pScreen);
|
||||
diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man
|
||||
index 13a9dc3..745f986 100644
|
||||
--- a/hw/xfree86/man/Xorg.man
|
||||
+++ b/hw/xfree86/man/Xorg.man
|
||||
@@ -283,6 +283,13 @@ is a comma separated list of directories to search for
|
||||
server modules. This option is only available when the server is run
|
||||
as root (i.e, with real-uid 0).
|
||||
.TP 8
|
||||
+.B \-noautoBindGPU
|
||||
+Disable automatically setting secondary GPUs up as output sinks and offload
|
||||
+sources. This is equivalent to setting the
|
||||
+.B AutoBindGPU
|
||||
+xorg.conf(__filemansuffix__) file option. To
|
||||
+.B false.
|
||||
+.TP 8
|
||||
.B \-nosilk
|
||||
Disable Silken Mouse support.
|
||||
.TP 8
|
||||
diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
|
||||
index 9589262..8d51e06 100644
|
||||
--- a/hw/xfree86/man/xorg.conf.man
|
||||
+++ b/hw/xfree86/man/xorg.conf.man
|
||||
@@ -672,6 +672,12 @@ Enabled by default.
|
||||
If this option is disabled, then no GPU devices will be added from the udev
|
||||
backend. Enabled by default. (May need to be disabled to setup Xinerama).
|
||||
.TP 7
|
||||
+.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q
|
||||
+If enabled then secondary GPUs will be automatically set up as output-sinks and
|
||||
+offload-sources. Making e.g. laptop outputs connected only to the secondary
|
||||
+GPU directly available for use without needing to run
|
||||
+"xrandr --setprovideroutputsource". Enabled by default.
|
||||
+.TP 7
|
||||
.BI "Option \*qLog\*q \*q" string \*q
|
||||
This option controls whether the log is flushed and/or synced to disk after
|
||||
each message.
|
||||
diff --git a/randr/randrstr.h b/randr/randrstr.h
|
||||
index f94174b..092d726 100644
|
||||
--- a/randr/randrstr.h
|
||||
+++ b/randr/randrstr.h
|
||||
@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p);
|
||||
extern _X_EXPORT void
|
||||
RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
|
||||
|
||||
+extern _X_EXPORT void
|
||||
+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen);
|
||||
+
|
||||
/* rrproviderproperty.c */
|
||||
|
||||
extern _X_EXPORT void
|
||||
diff --git a/randr/rrprovider.c b/randr/rrprovider.c
|
||||
index e4bc2bf..e04c18f 100644
|
||||
--- a/randr/rrprovider.c
|
||||
+++ b/randr/rrprovider.c
|
||||
@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
|
||||
|
||||
WriteEventsToClient(client, 1, (xEvent *) &pe);
|
||||
}
|
||||
+
|
||||
+void
|
||||
+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen)
|
||||
+{
|
||||
+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
|
||||
+ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen);
|
||||
+ RRProviderPtr provider = pScrPriv->provider;
|
||||
+ RRProviderPtr master_provider = masterPriv->provider;
|
||||
+
|
||||
+ if (!provider || !master_provider)
|
||||
+ return;
|
||||
+
|
||||
+ if ((provider->capabilities & RR_Capability_SinkOutput) &&
|
||||
+ (master_provider->capabilities & RR_Capability_SourceOutput)) {
|
||||
+ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider);
|
||||
+ RRInitPrimeSyncProps(pScreen);
|
||||
+ }
|
||||
+
|
||||
+ if ((provider->capabilities & RR_Capability_SourceOffload) &&
|
||||
+ (master_provider->capabilities & RR_Capability_SinkOffload))
|
||||
+ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider);
|
||||
+}
|
||||
--
|
||||
2.16.2
|
||||
|
@ -1,42 +0,0 @@
|
||||
From 26ef545b3502f61ca722a7a3373507e88ef64110 Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Fourdan <ofourdan@redhat.com>
|
||||
Date: Mon, 13 Mar 2023 11:08:47 +0100
|
||||
Subject: [PATCH xserver] composite: Fix use-after-free of the COW
|
||||
|
||||
ZDI-CAN-19866/CVE-2023-1393
|
||||
|
||||
If a client explicitly destroys the compositor overlay window (aka COW),
|
||||
we would leave a dangling pointer to that window in the CompScreen
|
||||
structure, which will trigger a use-after-free later.
|
||||
|
||||
Make sure to clear the CompScreen pointer to the COW when the latter gets
|
||||
destroyed explicitly by the client.
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
|
||||
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
composite/compwindow.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/composite/compwindow.c b/composite/compwindow.c
|
||||
index 4e2494b86..b30da589e 100644
|
||||
--- a/composite/compwindow.c
|
||||
+++ b/composite/compwindow.c
|
||||
@@ -620,6 +620,11 @@ compDestroyWindow(WindowPtr pWin)
|
||||
ret = (*pScreen->DestroyWindow) (pWin);
|
||||
cs->DestroyWindow = pScreen->DestroyWindow;
|
||||
pScreen->DestroyWindow = compDestroyWindow;
|
||||
+
|
||||
+ /* Did we just destroy the overlay window? */
|
||||
+ if (pWin == cs->pOverlayWin)
|
||||
+ cs->pOverlayWin = NULL;
|
||||
+
|
||||
/* compCheckTree (pWin->drawable.pScreen); can't check -- tree isn't good*/
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.40.0
|
||||
|
@ -1,72 +0,0 @@
|
||||
From e67e988730346c63d2f0cdf2531ed36b0c7ad5a6 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed, 23 Nov 2022 14:50:29 +1000
|
||||
Subject: [PATCH xserver] configure.ac: search for the fontrootdir ourselves
|
||||
|
||||
This replaces the use of font-utils' .m4 macro set with a copy of the
|
||||
only one we actually want: the bit for the fontrootpath.
|
||||
|
||||
We don't need configure options for every single subfont directory, so
|
||||
let's hardcode those in the default font path. Like meson does upstream
|
||||
too.
|
||||
|
||||
With this patch we no longer require the font-utils dependency.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
---
|
||||
configure.ac | 28 +++++++++++++++++-----------
|
||||
1 file changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 0909cc5b4d..2349320888 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -49,9 +49,6 @@ XORG_WITH_XSLTPROC
|
||||
XORG_ENABLE_UNIT_TESTS
|
||||
XORG_LD_WRAP([optional])
|
||||
|
||||
-m4_ifndef([XORG_FONT_MACROS_VERSION], [m4_fatal([must install font-util 1.1 or later before running autoconf/autogen])])
|
||||
-XORG_FONT_MACROS_VERSION(1.1)
|
||||
-
|
||||
dnl this gets generated by autoheader, and thus contains all the defines. we
|
||||
dnl don't ever actually use it, internally.
|
||||
AC_CONFIG_HEADERS(include/do-not-use-config.h)
|
||||
@@ -450,18 +447,27 @@ AC_MSG_RESULT([$FALLBACK_INPUT_DRIVER])
|
||||
AC_DEFINE_UNQUOTED(FALLBACK_INPUT_DRIVER, ["$FALLBACK_INPUT_DRIVER"], [ Fallback input driver ])
|
||||
|
||||
dnl Determine font path
|
||||
-XORG_FONTROOTDIR
|
||||
-XORG_FONTSUBDIR(FONTMISCDIR, fontmiscdir, misc)
|
||||
-XORG_FONTSUBDIR(FONTOTFDIR, fontotfdir, OTF)
|
||||
-XORG_FONTSUBDIR(FONTTTFDIR, fontttfdir, TTF)
|
||||
-XORG_FONTSUBDIR(FONTTYPE1DIR, fonttype1dir, Type1)
|
||||
-XORG_FONTSUBDIR(FONT75DPIDIR, font75dpidir, 75dpi)
|
||||
-XORG_FONTSUBDIR(FONT100DPIDIR, font100dpidir, 100dpi)
|
||||
+dnl This is a copy of XORG_FONTROOTDIR from font-utils so we can drop the dependency
|
||||
+AC_MSG_CHECKING([for root directory for font files])
|
||||
+AC_ARG_WITH(fontrootdir,
|
||||
+ AS_HELP_STRING([--with-fontrootdir=DIR],
|
||||
+ [Path to root directory for font files]),
|
||||
+ [FONTROOTDIR="$withval"])
|
||||
+# if --with-fontrootdir not specified...
|
||||
+if test "x${FONTROOTDIR}" = "x"; then
|
||||
+ FONTROOTDIR=`$PKG_CONFIG --variable=fontrootdir fontutil`
|
||||
+fi
|
||||
+# ...and if pkg-config didn't find fontdir in fontutil.pc...
|
||||
+if test "x${FONTROOTDIR}" = "x"; then
|
||||
+ FONTROOTDIR="${datadir}/fonts/X11"
|
||||
+fi
|
||||
+AC_SUBST(FONTROOTDIR)
|
||||
+AC_MSG_RESULT([${FONTROOTDIR}])
|
||||
|
||||
dnl Uses --with-default-font-path if set, otherwise uses standard
|
||||
dnl subdirectories of FONTROOTDIR. Some distros set the default font path to
|
||||
dnl "catalogue:/etc/X11/fontpath.d,built-ins"
|
||||
-DEFAULT_FONT_PATH="${FONTMISCDIR}/,${FONTTTFDIR}/,${FONTOTFDIR}/,${FONTTYPE1DIR}/,${FONT100DPIDIR}/,${FONT75DPIDIR}/"
|
||||
+DEFAULT_FONT_PATH="${FONTROOTDIR}/misc,${FONTROOTDIR}/OTF,${FONTROOTDIR}/TTF,${FONTROOTDIR}/Type1,${FONTROOTDIR}/75dpi,${FONTROOTDIR}/100dpi"
|
||||
case $host_os in
|
||||
darwin*) DEFAULT_FONT_PATH="${DEFAULT_FONT_PATH},/Library/Fonts,/System/Library/Fonts" ;;
|
||||
esac
|
||||
--
|
||||
2.38.1
|
||||
|
@ -1,77 +0,0 @@
|
||||
From 1801fe0ac3926882d47d7e1ad6c0518a2cdffd41 Mon Sep 17 00:00:00 2001
|
||||
From: Povilas Kanapickas <povilas@radix.lt>
|
||||
Date: Sun, 19 Dec 2021 18:11:07 +0200
|
||||
Subject: [PATCH] dix: Fix use after free in input device shutdown
|
||||
|
||||
This fixes access to freed heap memory via dev->master. E.g. when
|
||||
running BarrierNotify.ReceivesNotifyEvents/7 test from
|
||||
xorg-integration-tests:
|
||||
|
||||
==24736==ERROR: AddressSanitizer: heap-use-after-free on address
|
||||
0x619000065020 at pc 0x55c450e2b9cf bp 0x7fffc532fd20 sp 0x7fffc532fd10
|
||||
READ of size 4 at 0x619000065020 thread T0
|
||||
#0 0x55c450e2b9ce in GetMaster ../../../dix/devices.c:2722
|
||||
#1 0x55c450e9d035 in IsFloating ../../../dix/events.c:346
|
||||
#2 0x55c4513209c6 in GetDeviceUse ../../../Xi/xiquerydevice.c:525
|
||||
../../../Xi/xichangehierarchy.c:95
|
||||
#4 0x55c450e3455c in RemoveDevice ../../../dix/devices.c:1204
|
||||
../../../hw/xfree86/common/xf86Xinput.c:1142
|
||||
#6 0x55c450e17b04 in CloseDeviceList ../../../dix/devices.c:1038
|
||||
#7 0x55c450e1de85 in CloseDownDevices ../../../dix/devices.c:1068
|
||||
#8 0x55c450e837ef in dix_main ../../../dix/main.c:302
|
||||
#9 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
|
||||
(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
|
||||
#11 0x55c450d0113d in _start (/usr/lib/xorg/Xorg+0x117713d)
|
||||
|
||||
0x619000065020 is located 160 bytes inside of 912-byte region
|
||||
[0x619000064f80,0x619000065310)
|
||||
freed by thread T0 here:
|
||||
(/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10d7cf)
|
||||
#1 0x55c450e19f1c in CloseDevice ../../../dix/devices.c:1014
|
||||
#2 0x55c450e343a4 in RemoveDevice ../../../dix/devices.c:1186
|
||||
../../../hw/xfree86/common/xf86Xinput.c:1142
|
||||
#4 0x55c450e17b04 in CloseDeviceList ../../../dix/devices.c:1038
|
||||
#5 0x55c450e1de85 in CloseDownDevices ../../../dix/devices.c:1068
|
||||
#6 0x55c450e837ef in dix_main ../../../dix/main.c:302
|
||||
#7 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
|
||||
(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
|
||||
|
||||
previously allocated by thread T0 here:
|
||||
(/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10ddc6)
|
||||
#1 0x55c450e1c57b in AddInputDevice ../../../dix/devices.c:259
|
||||
#2 0x55c450e34840 in AllocDevicePair ../../../dix/devices.c:2755
|
||||
#3 0x55c45130318f in add_master ../../../Xi/xichangehierarchy.c:152
|
||||
../../../Xi/xichangehierarchy.c:465
|
||||
#5 0x55c4512cb9f5 in ProcIDispatch ../../../Xi/extinit.c:390
|
||||
#6 0x55c450e6a92b in Dispatch ../../../dix/dispatch.c:551
|
||||
#7 0x55c450e834b7 in dix_main ../../../dix/main.c:272
|
||||
#8 0x55c4517a8d93 in main ../../../dix/stubmain.c:34
|
||||
(/lib/x86_64-linux-gnu/libc.so.6+0x28564)
|
||||
|
||||
The problem is caused by dev->master being not reset when disabling the
|
||||
device, which then causes dangling pointer when the master device itself
|
||||
is being deleted when exiting whole server.
|
||||
|
||||
Note that RecalculateMasterButtons() requires dev->master to be still
|
||||
valid, so we can reset it only at the end of function.
|
||||
|
||||
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
|
||||
---
|
||||
dix/devices.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/dix/devices.c b/dix/devices.c
|
||||
index e62c34c55..5f9ce1678 100644
|
||||
--- a/dix/devices.c
|
||||
+++ b/dix/devices.c
|
||||
@@ -520,6 +520,7 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
|
||||
}
|
||||
|
||||
RecalculateMasterButtons(dev);
|
||||
+ dev->master = NULL;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 9e2ecb2af8302dedc49cb6a63ebe063c58a9e7e3 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Thu, 14 Dec 2023 11:29:49 +1000
|
||||
Subject: [PATCH 1/9] dix: allocate enough space for logical button maps
|
||||
|
||||
Both DeviceFocusEvent and the XIQueryPointer reply contain a bit for
|
||||
each logical button currently down. Since buttons can be arbitrarily mapped
|
||||
to anything up to 255 make sure we have enough bits for the maximum mapping.
|
||||
|
||||
CVE-2023-6816, ZDI-CAN-22664, ZDI-CAN-22665
|
||||
|
||||
This vulnerability was discovered by:
|
||||
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||
---
|
||||
Xi/xiquerypointer.c | 3 +--
|
||||
dix/enterleave.c | 5 +++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
|
||||
index 5b77b1a44..2b05ac5f3 100644
|
||||
--- a/Xi/xiquerypointer.c
|
||||
+++ b/Xi/xiquerypointer.c
|
||||
@@ -149,8 +149,7 @@ ProcXIQueryPointer(ClientPtr client)
|
||||
if (pDev->button) {
|
||||
int i;
|
||||
|
||||
- rep.buttons_len =
|
||||
- bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
|
||||
+ rep.buttons_len = bytes_to_int32(bits_to_bytes(256)); /* button map up to 255 */
|
||||
rep.length += rep.buttons_len;
|
||||
buttons = calloc(rep.buttons_len, 4);
|
||||
if (!buttons)
|
||||
diff --git a/dix/enterleave.c b/dix/enterleave.c
|
||||
index 867ec7436..ded8679d7 100644
|
||||
--- a/dix/enterleave.c
|
||||
+++ b/dix/enterleave.c
|
||||
@@ -784,8 +784,9 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
|
||||
|
||||
mouse = IsFloating(dev) ? dev : GetMaster(dev, MASTER_POINTER);
|
||||
|
||||
- /* XI 2 event */
|
||||
- btlen = (mouse->button) ? bits_to_bytes(mouse->button->numButtons) : 0;
|
||||
+ /* XI 2 event contains the logical button map - maps are CARD8
|
||||
+ * so we need 256 bits for the possibly maximum mapping */
|
||||
+ btlen = (mouse->button) ? bits_to_bytes(256) : 0;
|
||||
btlen = bytes_to_int32(btlen);
|
||||
len = sizeof(xXIFocusInEvent) + btlen * 4;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 133e0d651c5d12bf01999d6289e84e224ba77adc Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Mon, 22 Jan 2024 14:22:12 +1000
|
||||
Subject: [PATCH] dix: fix valuator copy/paste error in the DeviceStateNotify
|
||||
event
|
||||
|
||||
Fixes 219c54b8a3337456ce5270ded6a67bcde53553d5
|
||||
---
|
||||
dix/enterleave.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dix/enterleave.c b/dix/enterleave.c
|
||||
index 7b7ba1098..c1e6ac600 100644
|
||||
--- a/dix/enterleave.c
|
||||
+++ b/dix/enterleave.c
|
||||
@@ -619,11 +619,11 @@ FixDeviceValuator(DeviceIntPtr dev, deviceValuator * ev, ValuatorClassPtr v,
|
||||
ev->first_valuator = first;
|
||||
switch (ev->num_valuators) {
|
||||
case 6:
|
||||
- ev->valuator2 = v->axisVal[first + 5];
|
||||
+ ev->valuator5 = v->axisVal[first + 5];
|
||||
case 5:
|
||||
- ev->valuator2 = v->axisVal[first + 4];
|
||||
+ ev->valuator4 = v->axisVal[first + 4];
|
||||
case 4:
|
||||
- ev->valuator2 = v->axisVal[first + 3];
|
||||
+ ev->valuator3 = v->axisVal[first + 3];
|
||||
case 3:
|
||||
ev->valuator2 = v->axisVal[first + 2];
|
||||
case 2:
|
||||
--
|
||||
2.44.0
|
||||
|
@ -1,54 +0,0 @@
|
||||
From e89edec497bac581ca9b614fb00c25365580f045 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Fri, 19 Jan 2024 13:05:51 +0100
|
||||
Subject: [PATCH] ephyr: Fix incompatible pointer type build error
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Fix a compilation error on 32 bits architectures with gcc 14:
|
||||
|
||||
ephyr_glamor_xv.c: In function ‘ephyr_glamor_xv_init’:
|
||||
ephyr_glamor_xv.c:154:31: error: assignment to ‘SetPortAttributeFuncPtr’ {aka ‘int (*)(struct _KdScreenInfo *, long unsigned int, int, void *)’} from incompatible pointer type ‘int (*)(KdScreenInfo *, Atom, INT32, void *)’ {aka ‘int (*)(struct _KdScreenInfo *, long unsigned int, long int, void *)’} [-Wincompatible-pointer-types]
|
||||
154 | adaptor->SetPortAttribute = ephyr_glamor_xv_set_port_attribute;
|
||||
| ^
|
||||
ephyr_glamor_xv.c:155:31: error: assignment to ‘GetPortAttributeFuncPtr’ {aka ‘int (*)(struct _KdScreenInfo *, long unsigned int, int *, void *)’} from incompatible pointer type ‘int (*)(KdScreenInfo *, Atom, INT32 *, void *)’ {aka ‘int (*)(struct _KdScreenInfo *, long unsigned int, long int *, void *)’} [-Wincompatible-pointer-types]
|
||||
155 | adaptor->GetPortAttribute = ephyr_glamor_xv_get_port_attribute;
|
||||
| ^
|
||||
|
||||
Build error logs:
|
||||
https://koji.fedoraproject.org/koji/taskinfo?taskID=111964273
|
||||
|
||||
Signed-off-by: José Expósito <jexposit@redhat.com>
|
||||
---
|
||||
hw/kdrive/ephyr/ephyr_glamor_xv.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/hw/kdrive/ephyr/ephyr_glamor_xv.c b/hw/kdrive/ephyr/ephyr_glamor_xv.c
|
||||
index 4dd15cf41..b5eae48c8 100644
|
||||
--- a/hw/kdrive/ephyr/ephyr_glamor_xv.c
|
||||
+++ b/hw/kdrive/ephyr/ephyr_glamor_xv.c
|
||||
@@ -50,16 +50,16 @@ ephyr_glamor_xv_stop_video(KdScreenInfo *screen, void *data, Bool cleanup)
|
||||
|
||||
static int
|
||||
ephyr_glamor_xv_set_port_attribute(KdScreenInfo *screen,
|
||||
- Atom attribute, INT32 value, void *data)
|
||||
+ Atom attribute, int value, void *data)
|
||||
{
|
||||
- return glamor_xv_set_port_attribute(data, attribute, value);
|
||||
+ return glamor_xv_set_port_attribute(data, attribute, (INT32)value);
|
||||
}
|
||||
|
||||
static int
|
||||
ephyr_glamor_xv_get_port_attribute(KdScreenInfo *screen,
|
||||
- Atom attribute, INT32 *value, void *data)
|
||||
+ Atom attribute, int *value, void *data)
|
||||
{
|
||||
- return glamor_xv_get_port_attribute(data, attribute, value);
|
||||
+ return glamor_xv_get_port_attribute(data, attribute, (INT32 *)value);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,154 +0,0 @@
|
||||
From 454b3a826edb5fc6d0fea3a9cfd1a5e8fc568747 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Mon, 22 Jul 2019 13:51:06 -0400
|
||||
Subject: [PATCH xserver] hw: Rename boolean config value field from bool to
|
||||
boolean
|
||||
|
||||
"bool" conflicts with C++ (meh) and stdbool.h (ngh alright fine). This
|
||||
is a driver-visible change and will likely break the build for mach64,
|
||||
but it can be fixed by simply using xf86ReturnOptValBool like every
|
||||
other driver.
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
hw/xfree86/common/xf86Opt.h | 2 +-
|
||||
hw/xfree86/common/xf86Option.c | 10 +++++-----
|
||||
hw/xwin/winconfig.c | 22 +++++++++++-----------
|
||||
hw/xwin/winconfig.h | 2 +-
|
||||
4 files changed, 18 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/hw/xfree86/common/xf86Opt.h b/hw/xfree86/common/xf86Opt.h
|
||||
index 3be2a0fc7..3046fbd41 100644
|
||||
--- a/hw/xfree86/common/xf86Opt.h
|
||||
+++ b/hw/xfree86/common/xf86Opt.h
|
||||
@@ -41,7 +41,7 @@ typedef union {
|
||||
unsigned long num;
|
||||
const char *str;
|
||||
double realnum;
|
||||
- Bool bool;
|
||||
+ Bool boolean;
|
||||
OptFrequency freq;
|
||||
} ValueUnion;
|
||||
|
||||
diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
|
||||
index 06973bca3..ca538cc57 100644
|
||||
--- a/hw/xfree86/common/xf86Option.c
|
||||
+++ b/hw/xfree86/common/xf86Option.c
|
||||
@@ -213,7 +213,7 @@ LookupBoolOption(XF86OptionPtr optlist, const char *name, int deflt,
|
||||
o.name = name;
|
||||
o.type = OPTV_BOOLEAN;
|
||||
if (ParseOptionValue(-1, optlist, &o, markUsed))
|
||||
- deflt = o.value.bool;
|
||||
+ deflt = o.value.boolean;
|
||||
return deflt;
|
||||
}
|
||||
|
||||
@@ -474,7 +474,7 @@ xf86ShowUnusedOptions(int scrnIndex, XF86OptionPtr opt)
|
||||
static Bool
|
||||
GetBoolValue(OptionInfoPtr p, const char *s)
|
||||
{
|
||||
- return xf86getBoolValue(&p->value.bool, s);
|
||||
+ return xf86getBoolValue(&p->value.boolean, s);
|
||||
}
|
||||
|
||||
static Bool
|
||||
@@ -678,7 +678,7 @@ ParseOptionValue(int scrnIndex, XF86OptionPtr options, OptionInfoPtr p,
|
||||
if (markUsed)
|
||||
xf86MarkOptionUsedByName(options, newn);
|
||||
if (GetBoolValue(&opt, s)) {
|
||||
- p->value.bool = !opt.value.bool;
|
||||
+ p->value.boolean = !opt.value.boolean;
|
||||
p->found = TRUE;
|
||||
}
|
||||
else {
|
||||
@@ -869,7 +869,7 @@ xf86GetOptValBool(const OptionInfoRec * table, int token, Bool *value)
|
||||
|
||||
p = xf86TokenToOptinfo(table, token);
|
||||
if (p && p->found) {
|
||||
- *value = p->value.bool;
|
||||
+ *value = p->value.boolean;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@@ -883,7 +883,7 @@ xf86ReturnOptValBool(const OptionInfoRec * table, int token, Bool def)
|
||||
|
||||
p = xf86TokenToOptinfo(table, token);
|
||||
if (p && p->found) {
|
||||
- return p->value.bool;
|
||||
+ return p->value.boolean;
|
||||
}
|
||||
else
|
||||
return def;
|
||||
diff --git a/hw/xwin/winconfig.c b/hw/xwin/winconfig.c
|
||||
index 31894d2fb..646d69006 100644
|
||||
--- a/hw/xwin/winconfig.c
|
||||
+++ b/hw/xwin/winconfig.c
|
||||
@@ -623,7 +623,7 @@ winSetBoolOption(void *optlist, const char *name, int deflt)
|
||||
o.name = name;
|
||||
o.type = OPTV_BOOLEAN;
|
||||
if (ParseOptionValue(-1, optlist, &o))
|
||||
- deflt = o.value.bool;
|
||||
+ deflt = o.value.boolean;
|
||||
return deflt;
|
||||
}
|
||||
|
||||
@@ -918,7 +918,7 @@ ParseOptionValue(int scrnIndex, void *options, OptionInfoPtr p)
|
||||
}
|
||||
if ((s = winFindOptionValue(options, newn)) != NULL) {
|
||||
if (GetBoolValue(&opt, s)) {
|
||||
- p->value.bool = !opt.value.bool;
|
||||
+ p->value.boolean = !opt.value.boolean;
|
||||
p->found = TRUE;
|
||||
}
|
||||
else {
|
||||
@@ -968,25 +968,25 @@ static Bool
|
||||
GetBoolValue(OptionInfoPtr p, const char *s)
|
||||
{
|
||||
if (*s == 0) {
|
||||
- p->value.bool = TRUE;
|
||||
+ p->value.boolean = TRUE;
|
||||
}
|
||||
else {
|
||||
if (winNameCompare(s, "1") == 0)
|
||||
- p->value.bool = TRUE;
|
||||
+ p->value.boolean = TRUE;
|
||||
else if (winNameCompare(s, "on") == 0)
|
||||
- p->value.bool = TRUE;
|
||||
+ p->value.boolean = TRUE;
|
||||
else if (winNameCompare(s, "true") == 0)
|
||||
- p->value.bool = TRUE;
|
||||
+ p->value.boolean = TRUE;
|
||||
else if (winNameCompare(s, "yes") == 0)
|
||||
- p->value.bool = TRUE;
|
||||
+ p->value.boolean = TRUE;
|
||||
else if (winNameCompare(s, "0") == 0)
|
||||
- p->value.bool = FALSE;
|
||||
+ p->value.boolean = FALSE;
|
||||
else if (winNameCompare(s, "off") == 0)
|
||||
- p->value.bool = FALSE;
|
||||
+ p->value.boolean = FALSE;
|
||||
else if (winNameCompare(s, "false") == 0)
|
||||
- p->value.bool = FALSE;
|
||||
+ p->value.boolean = FALSE;
|
||||
else if (winNameCompare(s, "no") == 0)
|
||||
- p->value.bool = FALSE;
|
||||
+ p->value.boolean = FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
diff --git a/hw/xwin/winconfig.h b/hw/xwin/winconfig.h
|
||||
index f079368c7..bd1f59650 100644
|
||||
--- a/hw/xwin/winconfig.h
|
||||
+++ b/hw/xwin/winconfig.h
|
||||
@@ -199,7 +199,7 @@ typedef union {
|
||||
unsigned long num;
|
||||
char *str;
|
||||
double realnum;
|
||||
- Bool bool;
|
||||
+ Bool boolean;
|
||||
OptFrequency freq;
|
||||
} ValueUnion;
|
||||
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 94b4a3d45451d29e9539ea234ce8b5e9ed58546c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= <spaz16@wp.pl>
|
||||
Date: Thu, 13 Jan 2022 00:47:27 +0100
|
||||
Subject: [PATCH xserver] present: Check for NULL to prevent crash
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1275
|
||||
Signed-off-by: Błażej Szczygieł <spaz16@wp.pl>
|
||||
Tested-by: Aaron Plattner <aplattner@nvidia.com>
|
||||
(cherry picked from commit 22d5818851967408bb7c903cb345b7ca8766094c)
|
||||
---
|
||||
present/present_scmd.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/present/present_scmd.c b/present/present_scmd.c
|
||||
index 3c68e690b..11391adbb 100644
|
||||
--- a/present/present_scmd.c
|
||||
+++ b/present/present_scmd.c
|
||||
@@ -168,6 +168,9 @@ present_scmd_get_crtc(present_screen_priv_ptr screen_priv, WindowPtr window)
|
||||
if (!screen_priv->info)
|
||||
return NULL;
|
||||
|
||||
+ if (!screen_priv->info->get_crtc)
|
||||
+ return NULL;
|
||||
+
|
||||
return (*screen_priv->info->get_crtc)(window);
|
||||
}
|
||||
|
||||
@@ -206,6 +209,9 @@ present_flush(WindowPtr window)
|
||||
if (!screen_priv->info)
|
||||
return;
|
||||
|
||||
+ if (!screen_priv->info->flush)
|
||||
+ return;
|
||||
+
|
||||
(*screen_priv->info->flush) (window);
|
||||
}
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,105 +0,0 @@
|
||||
From b98fc07d3442a289c6bef82df50dd0a2d01de71a Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Thu, 2 Feb 2023 12:26:27 -0500
|
||||
Subject: [PATCH xserver] present: Send a PresentConfigureNotify event for
|
||||
destroyed windows
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This enables fixing a deadlock case on the client side, where the client
|
||||
ends up blocked waiting for a Present event that will never come because
|
||||
the window was destroyed. The new PresentWindowDestroyed flag allows the
|
||||
client to avoid blocking indefinitely.
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
See-also: https://gitlab.freedesktop.org/mesa/mesa/-/issues/116
|
||||
See-also: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6685
|
||||
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
|
||||
(cherry picked from commit 462b06033e66a32308d940eb5fc47f5e4c914dc0)
|
||||
---
|
||||
present/present_event.c | 5 +++--
|
||||
present/present_priv.h | 7 ++++++-
|
||||
present/present_screen.c | 11 ++++++++++-
|
||||
3 files changed, 19 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/present/present_event.c b/present/present_event.c
|
||||
index 435b26b70..849732dc8 100644
|
||||
--- a/present/present_event.c
|
||||
+++ b/present/present_event.c
|
||||
@@ -102,7 +102,8 @@ present_event_swap(xGenericEvent *from, xGenericEvent *to)
|
||||
}
|
||||
|
||||
void
|
||||
-present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling)
|
||||
+present_send_config_notify(WindowPtr window, int x, int y, int w, int h,
|
||||
+ int bw, WindowPtr sibling, CARD32 flags)
|
||||
{
|
||||
present_window_priv_ptr window_priv = present_window_priv(window);
|
||||
|
||||
@@ -122,7 +123,7 @@ present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw,
|
||||
.off_y = 0,
|
||||
.pixmap_width = w,
|
||||
.pixmap_height = h,
|
||||
- .pixmap_flags = 0
|
||||
+ .pixmap_flags = flags
|
||||
};
|
||||
present_event_ptr event;
|
||||
|
||||
diff --git a/present/present_priv.h b/present/present_priv.h
|
||||
index 6ebd009a2..4ad729864 100644
|
||||
--- a/present/present_priv.h
|
||||
+++ b/present/present_priv.h
|
||||
@@ -43,6 +43,11 @@
|
||||
#define DebugPresent(x)
|
||||
#endif
|
||||
|
||||
+/* XXX this belongs in presentproto */
|
||||
+#ifndef PresentWindowDestroyed
|
||||
+#define PresentWindowDestroyed (1 << 0)
|
||||
+#endif
|
||||
+
|
||||
extern int present_request;
|
||||
|
||||
extern DevPrivateKeyRec present_screen_private_key;
|
||||
@@ -307,7 +312,7 @@ void
|
||||
present_free_events(WindowPtr window);
|
||||
|
||||
void
|
||||
-present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling);
|
||||
+present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling, CARD32 flags);
|
||||
|
||||
void
|
||||
present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc);
|
||||
diff --git a/present/present_screen.c b/present/present_screen.c
|
||||
index 15684eda4..2c29aafd2 100644
|
||||
--- a/present/present_screen.c
|
||||
+++ b/present/present_screen.c
|
||||
@@ -93,6 +93,15 @@ present_destroy_window(WindowPtr window)
|
||||
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
|
||||
present_window_priv_ptr window_priv = present_window_priv(window);
|
||||
|
||||
+ present_send_config_notify(window,
|
||||
+ window->drawable.x,
|
||||
+ window->drawable.y,
|
||||
+ window->drawable.width,
|
||||
+ window->drawable.height,
|
||||
+ window->borderWidth,
|
||||
+ window->nextSib,
|
||||
+ PresentWindowDestroyed);
|
||||
+
|
||||
if (window_priv) {
|
||||
present_clear_window_notifies(window);
|
||||
present_free_events(window);
|
||||
@@ -123,7 +132,7 @@ present_config_notify(WindowPtr window,
|
||||
ScreenPtr screen = window->drawable.pScreen;
|
||||
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
|
||||
|
||||
- present_send_config_notify(window, x, y, w, h, bw, sibling);
|
||||
+ present_send_config_notify(window, x, y, w, h, bw, sibling, 0);
|
||||
|
||||
unwrap(screen_priv, screen, ConfigNotify);
|
||||
if (screen->ConfigNotify)
|
||||
--
|
||||
2.40.0
|
||||
|
1
dead.package
Normal file
1
dead.package
Normal file
@ -0,0 +1 @@
|
||||
xorg-x11-server package is retired on branch c10s for CS-2432
|
Loading…
Reference in New Issue
Block a user