From 43ab1686a71ee9183c0d4e42c7ff145bfb4efc85 Mon Sep 17 00:00:00 2001 From: James Antill Date: Thu, 26 May 2022 16:21:31 -0400 Subject: [PATCH] Auto sync2gitlab import of xorg-x11-server-1.20.11-5.el8.src.rpm --- .gitignore | 1 + ...ys-install-vbe-and-int10-sdk-headers.patch | 37 + ...-the-suid-root-wrapper-always-start-.patch | 41 + ...probing-a-non-PCI-platform-device-on.patch | 31 + 0001-autobind-GPUs-to-the-screen.patch | 293 ++++++ 0001-link-with-z-now.patch | 214 +++++ ...rm-device-PCI-detection-for-complex-.patch | 45 + ...e-platform-device-probe-less-fragile.patch | 129 +++ ...ce-glamor-initialization-failed-mess.patch | 37 + ...-fallback-driver-mappings-for-i965-a.patch | 28 + ...obe-for-drivers-not-shipped-in-RHEL8.patch | 278 ++++++ ...ard-Work-around-broken-fbdev-headers.patch | 34 + ...sent-Check-for-NULL-to-prevent-crash.patch | 43 + ...f-bounds-access-in-SwapCreateRegiste.patch | 35 + ..._gl-as-vdpau_driver-for-Intel-i965-G.patch | 152 ++++ ...ix-drm_drop_master-before-vt_reldisp.patch | 167 ++++ ...86-Don-t-autoconfigure-vesa-or-fbdev.patch | 27 + ...e86-LeaveVT-from-xf86CrtcCloseScreen.patch | 27 + ...witch-to-original-VT-if-it-is-active.patch | 136 +++ ...he-readlink-buffer-is-null-terminate.patch | 34 + ...ee86-try-harder-to-span-on-multihead.patch | 190 ++++ ...setting-driver-by-default-on-GeForce.patch | 52 ++ ...f-bounds-access-in-ProcXFixesCreateP.patch | 44 + ...bounds-access-in-SProcScreenSaverSus.patch | 34 + ...f-bounds-access-in-SProcRenderCompos.patch | 53 ++ 06_use-intel-only-on-pre-gen4.diff | 30 + 10-quirks.conf | 38 + EMPTY | 1 - driver-abi-rebuild.sh | 54 ++ gitignore | 306 +++++++ sources | 1 + xorg-x11-server.spec | 832 ++++++++++++++++++ xserver-sdk-abi-requires.git | 14 + xserver-sdk-abi-requires.release | 19 + xserver.pamd | 5 + xvfb-run.sh | 200 +++++ 36 files changed, 3661 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 0001-Always-install-vbe-and-int10-sdk-headers.patch create mode 100644 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch create mode 100644 0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch create mode 100644 0001-autobind-GPUs-to-the-screen.patch create mode 100644 0001-link-with-z-now.patch create mode 100644 0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch create mode 100644 0001-linux-Make-platform-device-probe-less-fragile.patch create mode 100644 0001-modesetting-Reduce-glamor-initialization-failed-mess.patch create mode 100644 0001-mustard-Add-DRI2-fallback-driver-mappings-for-i965-a.patch create mode 100644 0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL8.patch create mode 100644 0001-mustard-Work-around-broken-fbdev-headers.patch create mode 100644 0001-present-Check-for-NULL-to-prevent-crash.patch create mode 100644 0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch create mode 100644 0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch create mode 100644 0001-xf86-logind-Fix-drm_drop_master-before-vt_reldisp.patch create mode 100644 0001-xfree86-Don-t-autoconfigure-vesa-or-fbdev.patch create mode 100644 0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch create mode 100644 0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch create mode 100644 0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch create mode 100644 0001-xfree86-try-harder-to-span-on-multihead.patch create mode 100644 0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch create mode 100644 0002-xfixes-Fix-out-of-bounds-access-in-ProcXFixesCreateP.patch create mode 100644 0003-Xext-Fix-out-of-bounds-access-in-SProcScreenSaverSus.patch create mode 100644 0004-render-Fix-out-of-bounds-access-in-SProcRenderCompos.patch create mode 100644 06_use-intel-only-on-pre-gen4.diff create mode 100644 10-quirks.conf delete mode 100644 EMPTY create mode 100755 driver-abi-rebuild.sh create mode 100644 gitignore create mode 100644 sources create mode 100644 xorg-x11-server.spec create mode 100755 xserver-sdk-abi-requires.git create mode 100755 xserver-sdk-abi-requires.release create mode 100644 xserver.pamd create mode 100644 xvfb-run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d200244 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/xorg-server-1.20.11.tar.bz2 diff --git a/0001-Always-install-vbe-and-int10-sdk-headers.patch b/0001-Always-install-vbe-and-int10-sdk-headers.patch new file mode 100644 index 0000000..c613eb8 --- /dev/null +++ b/0001-Always-install-vbe-and-int10-sdk-headers.patch @@ -0,0 +1,37 @@ +From e96a83d9b1b5a52a41213c7a4840dc96b4f5b06f Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 15 Aug 2012 12:35:21 -0400 +Subject: [PATCH] Always install vbe and int10 sdk headers + +Signed-off-by: Adam Jackson +--- + hw/xfree86/Makefile.am | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am +index b876b79..a170b58 100644 +--- a/hw/xfree86/Makefile.am ++++ b/hw/xfree86/Makefile.am +@@ -26,17 +26,9 @@ if VGAHW + VGAHW_SUBDIR = vgahw + endif + +-if VBE +-VBE_SUBDIR = vbe +-endif +- +-if INT10MODULE +-INT10_SUBDIR = int10 +-endif +- +-SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \ ++SUBDIRS = common ddc x86emu int10 os-support parser \ + ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \ +- $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods xkb \ ++ $(DRI2_SUBDIR) . vbe i2c dixmods xkb \ + fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \ + $(GLAMOR_EGL_SUBDIR) drivers + +-- +2.13.6 + diff --git a/0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch b/0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch new file mode 100644 index 0000000..9355ad2 --- /dev/null +++ b/0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch @@ -0,0 +1,41 @@ +From 38ae53c94a88c7bd5877c72a12582b60865e07ff Mon Sep 17 00:00:00 2001 +From: Hans de Goede +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 +--- + 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 + diff --git a/0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch b/0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch new file mode 100644 index 0000000..1ed02f4 --- /dev/null +++ b/0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch @@ -0,0 +1,31 @@ +From e50c85f4ebf559a3bac4817b41074c43d4691779 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 26 Oct 2018 17:47:30 -0700 +Subject: [PATCH xserver] Fix segfault on probing a non-PCI platform device on + a system with PCI. + +Some Broadcom set-top-box boards have PCI busses, but the GPU is still +probed through DT. We would dereference a null busid here in that +case. + +Signed-off-by: Eric Anholt +--- + hw/xfree86/common/xf86platformBus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index cef47da03..dadbac6c8 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -289,7 +289,7 @@ xf86platformProbe(void) + for (i = 0; i < xf86_num_platform_devices; i++) { + char *busid = xf86_platform_odev_attributes(i)->busid; + +- if (pci && (strncmp(busid, "pci:", 4) == 0)) { ++ if (pci && busid && (strncmp(busid, "pci:", 4) == 0)) { + platform_find_pci_info(&xf86_platform_devices[i], busid); + } + +-- +2.14.4 + diff --git a/0001-autobind-GPUs-to-the-screen.patch b/0001-autobind-GPUs-to-the-screen.patch new file mode 100644 index 0000000..86b96a2 --- /dev/null +++ b/0001-autobind-GPUs-to-the-screen.patch @@ -0,0 +1,293 @@ +From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001 +From: Dave Airlie +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 +[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream] +Signed-off-by: Hans de Goede +--- + 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 + diff --git a/0001-link-with-z-now.patch b/0001-link-with-z-now.patch new file mode 100644 index 0000000..a497006 --- /dev/null +++ b/0001-link-with-z-now.patch @@ -0,0 +1,214 @@ +From e84d6f25015d36202fd524b8b8d85d2324348ddb Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 19 Nov 2018 11:27:09 -0500 +Subject: [PATCH] link with -z now + +Signed-off-by: Adam Jackson +--- + hw/dmx/Makefile.am | 2 +- + hw/kdrive/ephyr/Makefile.am | 2 +- + hw/vfb/Makefile.am | 2 +- + hw/xfree86/Makefile.am | 3 ++- + hw/xfree86/dixmods/Makefile.am | 6 +++--- + hw/xfree86/exa/Makefile.am | 2 +- + hw/xfree86/fbdevhw/Makefile.am | 2 +- + hw/xfree86/int10/Makefile.am | 2 +- + hw/xfree86/shadowfb/Makefile.am | 2 +- + hw/xfree86/utils/cvt/Makefile.am | 1 + + hw/xfree86/utils/gtf/Makefile.am | 1 + + hw/xfree86/vgahw/Makefile.am | 2 +- + hw/xnest/Makefile.am | 2 +- + hw/xwayland/Makefile.am | 2 +- + 14 files changed, 17 insertions(+), 14 deletions(-) + +diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am +index eef84cb..9ab20cc 100644 +--- a/hw/dmx/Makefile.am ++++ b/hw/dmx/Makefile.am +@@ -78,7 +78,7 @@ XDMX_LIBS = \ + input/libdmxinput.a \ + config/libdmxconfig.a + +-Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + Xdmx_DEPENDENCIES= $(XDMX_LIBS) + Xdmx_LDADD = $(XDMX_LIBS) $(XDMX_SYS_LIBS) $(XSERVER_SYS_LIBS) + +diff --git a/hw/kdrive/ephyr/Makefile.am b/hw/kdrive/ephyr/Makefile.am +index d12559b..cc37add 100644 +--- a/hw/kdrive/ephyr/Makefile.am ++++ b/hw/kdrive/ephyr/Makefile.am +@@ -78,7 +78,7 @@ Xephyr_LDADD = \ + + Xephyr_DEPENDENCIES = @KDRIVE_LOCAL_LIBS@ $(XEPHYR_GLAMOR_LIB) + +-Xephyr_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xephyr_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -W,-z,now -pie + + relink: + $(AM_V_at)rm -f $(bin_PROGRAMS) && $(MAKE) $(bin_PROGRAMS) +diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am +index 7033397..c09a9c9 100644 +--- a/hw/vfb/Makefile.am ++++ b/hw/vfb/Makefile.am +@@ -20,7 +20,7 @@ XVFB_LIBS = \ + + Xvfb_LDADD = $(XVFB_LIBS) $(XVFB_SYS_LIBS) $(XSERVER_SYS_LIBS) + Xvfb_DEPENDENCIES = $(XVFB_LIBS) +-Xvfb_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xvfb_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + + relink: + $(AM_V_at)rm -f Xvfb$(EXEEXT) && $(MAKE) Xvfb$(EXEEXT) +diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am +index 32f98b5..5955148 100644 +--- a/hw/xfree86/Makefile.am ++++ b/hw/xfree86/Makefile.am +@@ -78,12 +78,13 @@ Xorg_LDADD = \ + $(XSERVER_SYS_LIBS) + Xorg_DEPENDENCIES = $(LOCAL_LIBS) + +-Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + + if SUID_WRAPPER + wrapexecdir = $(SUID_WRAPPER_DIR) + wrapexec_PROGRAMS = Xorg.wrap + Xorg_wrap_SOURCES = xorg-wrapper.c ++Xorg_wrap_LDFLAGS = -Wl,-z,now -pie + endif + + BUILT_SOURCES = xorg.conf.example +diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am +index 856659f..6ab101b 100644 +--- a/hw/xfree86/dixmods/Makefile.am ++++ b/hw/xfree86/dixmods/Makefile.am +@@ -17,17 +17,17 @@ AM_CPPFLAGS = @XORG_INCS@ \ + -I$(top_srcdir)/miext/shadow \ + -I$(top_srcdir)/glx + +-libfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + libfb_la_LIBADD = $(top_builddir)/fb/libfb.la + libfb_la_SOURCES = fbmodule.c + libfb_la_CFLAGS = $(AM_CFLAGS) + +-libwfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libwfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + libwfb_la_LIBADD = $(top_builddir)/fb/libwfb.la + libwfb_la_SOURCES = fbmodule.c + libwfb_la_CFLAGS = $(AM_CFLAGS) -DFB_ACCESS_WRAPPER + +-libglx_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libglx_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + libglx_la_LIBADD = $(top_builddir)/glx/libglx.la $(GLX_SYS_LIBS) + if DRI2 + libglx_la_LIBADD += $(top_builddir)/glx/libglxdri.la +diff --git a/hw/xfree86/exa/Makefile.am b/hw/xfree86/exa/Makefile.am +index ccbb305..7bf7137 100644 +--- a/hw/xfree86/exa/Makefile.am ++++ b/hw/xfree86/exa/Makefile.am +@@ -2,7 +2,7 @@ SUBDIRS = man + + module_LTLIBRARIES = libexa.la + +-libexa_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libexa_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + + AM_CPPFLAGS = \ + $(XORG_INCS) \ +diff --git a/hw/xfree86/fbdevhw/Makefile.am b/hw/xfree86/fbdevhw/Makefile.am +index 37cd88c..895cfab 100644 +--- a/hw/xfree86/fbdevhw/Makefile.am ++++ b/hw/xfree86/fbdevhw/Makefile.am +@@ -2,7 +2,7 @@ SUBDIRS = man + + module_LTLIBRARIES = libfbdevhw.la + +-libfbdevhw_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libfbdevhw_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + + if FBDEVHW + libfbdevhw_la_SOURCES = fbdevhw.c +diff --git a/hw/xfree86/int10/Makefile.am b/hw/xfree86/int10/Makefile.am +index 66cb14d..aad47a1 100644 +--- a/hw/xfree86/int10/Makefile.am ++++ b/hw/xfree86/int10/Makefile.am +@@ -4,7 +4,7 @@ sdk_HEADERS = xf86int10.h + + EXTRA_CFLAGS = + +-libint10_la_LDFLAGS = -avoid-version ++libint10_la_LDFLAGS = -avoid-version -Wl,-z,now + libint10_la_LIBADD = $(PCIACCESS_LIBS) + + COMMON_SOURCES = \ +diff --git a/hw/xfree86/shadowfb/Makefile.am b/hw/xfree86/shadowfb/Makefile.am +index 67fb2e4..a8c2d59 100644 +--- a/hw/xfree86/shadowfb/Makefile.am ++++ b/hw/xfree86/shadowfb/Makefile.am +@@ -1,5 +1,5 @@ + module_LTLIBRARIES = libshadowfb.la +-libshadowfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) ++libshadowfb_la_LDFLAGS = -module -avoid-version $(LD_NO_UNDEFINED_FLAG) -Wl,-z,now + libshadowfb_la_SOURCES = sfbmodule.c shadowfb.c + libshadowfb_la_LIBADD = $(PIXMAN_LIBS) + +diff --git a/hw/xfree86/utils/cvt/Makefile.am b/hw/xfree86/utils/cvt/Makefile.am +index 26abeb4..19b0eba 100644 +--- a/hw/xfree86/utils/cvt/Makefile.am ++++ b/hw/xfree86/utils/cvt/Makefile.am +@@ -33,3 +33,4 @@ cvt_SOURCES = cvt.c \ + $(top_srcdir)/os/xprintf.c + + cvt_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) ++cvt_LDFLAGS = -Wl,-z,now -pie +diff --git a/hw/xfree86/utils/gtf/Makefile.am b/hw/xfree86/utils/gtf/Makefile.am +index f77bf60..f520fb9 100644 +--- a/hw/xfree86/utils/gtf/Makefile.am ++++ b/hw/xfree86/utils/gtf/Makefile.am +@@ -25,3 +25,4 @@ bin_PROGRAMS = gtf + gtf_SOURCES = gtf.c + gtf_CFLAGS = $(XORG_CFLAGS) + gtf_LDADD = -lm ++gtf_LDFLAGS = -Wl,-z,now -pie +diff --git a/hw/xfree86/vgahw/Makefile.am b/hw/xfree86/vgahw/Makefile.am +index b8196a6..37ac499 100644 +--- a/hw/xfree86/vgahw/Makefile.am ++++ b/hw/xfree86/vgahw/Makefile.am +@@ -1,5 +1,5 @@ + module_LTLIBRARIES = libvgahw.la +-libvgahw_la_LDFLAGS = -avoid-version ++libvgahw_la_LDFLAGS = -avoid-version -Wl,-z,now + libvgahw_la_LIBADD = $(PCIACCESS_LIBS) + libvgahw_la_SOURCES = vgaHW.c vgaHWmodule.c + AM_CPPFLAGS = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c +diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am +index c77da64..185803c 100644 +--- a/hw/xnest/Makefile.am ++++ b/hw/xnest/Makefile.am +@@ -51,7 +51,7 @@ Xnest_SOURCES = $(SRCS) + + Xnest_DEPENDENCIES = $(XNEST_LIBS) + Xnest_LDADD = $(XNEST_LIBS) $(XNEST_SYS_LIBS) $(XSERVER_SYS_LIBS) +-Xnest_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xnest_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + + EXTRA_DIST = icon \ + screensaver +diff --git a/hw/xwayland/Makefile.am b/hw/xwayland/Makefile.am +index bc1cb85..2f70cd1 100644 +--- a/hw/xwayland/Makefile.am ++++ b/hw/xwayland/Makefile.am +@@ -28,7 +28,7 @@ Xwayland_LDADD = \ + $(XWAYLAND_SYS_LIBS) \ + $(top_builddir)/Xext/libXvidmode.la \ + $(XSERVER_SYS_LIBS) +-Xwayland_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xwayland_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + + Xwayland_built_sources = + +-- +2.19.1 + diff --git a/0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch b/0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch new file mode 100644 index 0000000..9c0a311 --- /dev/null +++ b/0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch @@ -0,0 +1,45 @@ +From b6e18eb57f3dd104704d0a5ec3d2f051645b9068 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 19 Jun 2019 14:23:56 -0400 +Subject: [PATCH xserver] linux: Fix platform device PCI detection for complex + bus topologies + +Suppose you're in a Hyper-V guest and are trying to use PCI passthrough. +The ID_PATH that udev will construct for that looks something like +"acpi-VMBUS:00-pci-b8c8:00:00.0", and obviously looking for "pci-" in +the first four characters of that is going to not work. + +Instead, strstr. I suppose it's possible you could have _multiple_ PCI +buses in the path, in which case you'd want strrstr, if that were a +thing. +--- + config/udev.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/config/udev.c b/config/udev.c +index 314acba6ce..6e11aa3b88 100644 +--- a/config/udev.c ++++ b/config/udev.c +@@ -474,7 +474,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path + config_odev_probe_proc_ptr probe_callback) + { + struct OdevAttributes *attribs = config_odev_allocate_attributes(); +- const char *value; ++ const char *value, *str; + + attribs->path = XNFstrdup(path); + attribs->syspath = XNFstrdup(syspath); +@@ -482,8 +482,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path + attribs->minor = minor; + + value = udev_device_get_property_value(udev_device, "ID_PATH"); +- if (value && !strncmp(value, "pci-", 4)) { +- attribs->busid = XNFstrdup(value); ++ if (value && (str = strstr(value, "pci-"))) { ++ attribs->busid = XNFstrdup(str); + attribs->busid[3] = ':'; + } + +-- +2.21.0 + diff --git a/0001-linux-Make-platform-device-probe-less-fragile.patch b/0001-linux-Make-platform-device-probe-less-fragile.patch new file mode 100644 index 0000000..7be4258 --- /dev/null +++ b/0001-linux-Make-platform-device-probe-less-fragile.patch @@ -0,0 +1,129 @@ +From 28320833d61af76dc3b77b985c69706f3e021836 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 18 Sep 2018 14:37:51 -0400 +Subject: [PATCH xserver] linux: Make platform device probe less fragile + +At the point where xf86BusProbe runs we haven't yet taken our own VT, +which means we can't perform drm "master" operations on the device. This +is tragic, because we need master to fish the bus id string out of the +kernel, which we can only do after drmSetInterfaceVersion, which for +some reason stores that string on the device not the file handle and +thus needs master access. + +Fortunately we know the format of the busid string, and it happens to +almost be the same as the ID_PATH variable from udev. Use that instead +and stop calling drmSetInterfaceVersion. + +Signed-off-by: Adam Jackson +--- + config/udev.c | 17 ++++++++++++----- + hw/xfree86/os-support/linux/lnx_platform.c | 13 ++----------- + 2 files changed, 14 insertions(+), 16 deletions(-) + +diff --git a/config/udev.c b/config/udev.c +index 3a73189e25..8c6c4b6665 100644 +--- a/config/udev.c ++++ b/config/udev.c +@@ -56,7 +56,7 @@ static struct udev_monitor *udev_monitor; + + #ifdef CONFIG_UDEV_KMS + static void +-config_udev_odev_setup_attribs(const char *path, const char *syspath, ++config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, + int major, int minor, + config_odev_probe_proc_ptr probe_callback); + #endif +@@ -128,7 +128,7 @@ device_added(struct udev_device *udev_device) + + LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path); + +- config_udev_odev_setup_attribs(path, syspath, major(devnum), ++ config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum), + minor(devnum), NewGPUDeviceRequest); + return; + } +@@ -322,7 +322,7 @@ device_removed(struct udev_device *device) + + LogMessage(X_INFO, "config/udev: removing GPU device %s %s\n", + syspath, path); +- config_udev_odev_setup_attribs(path, syspath, major(devnum), ++ config_udev_odev_setup_attribs(device, path, syspath, major(devnum), + minor(devnum), DeleteGPUDeviceRequest); + /* Retry vtenter after a drm node removal */ + systemd_logind_vtenter(); +@@ -465,17 +465,24 @@ config_udev_fini(void) + #ifdef CONFIG_UDEV_KMS + + static void +-config_udev_odev_setup_attribs(const char *path, const char *syspath, ++config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, + int major, int minor, + config_odev_probe_proc_ptr probe_callback) + { + struct OdevAttributes *attribs = config_odev_allocate_attributes(); ++ const char *value; + + attribs->path = XNFstrdup(path); + attribs->syspath = XNFstrdup(syspath); + attribs->major = major; + attribs->minor = minor; + ++ value = udev_device_get_property_value(udev_device, "ID_PATH"); ++ if (value && !strncmp(value, "pci-", 4)) { ++ attribs->busid = XNFstrdup(value); ++ attribs->busid[3] = ':'; ++ } ++ + /* ownership of attribs is passed to probe layer */ + probe_callback(attribs); + } +@@ -516,7 +523,7 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback) + else if (!check_seat(udev_device)) + goto no_probe; + +- config_udev_odev_setup_attribs(path, syspath, major(devnum), ++ config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum), + minor(devnum), probe_callback); + no_probe: + udev_device_unref(udev_device); +diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c +index 70374ace88..0eb6d22875 100644 +--- a/hw/xfree86/os-support/linux/lnx_platform.c ++++ b/hw/xfree86/os-support/linux/lnx_platform.c +@@ -30,6 +30,8 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) + int err = 0; + Bool paused, server_fd = FALSE; + ++ LogMessage(X_INFO, "Platform probe for %s\n", attribs->syspath); ++ + fd = systemd_logind_take_fd(attribs->major, attribs->minor, path, &paused); + if (fd != -1) { + if (paused) { +@@ -53,13 +55,6 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) + sv.drm_dd_major = -1; /* Don't care */ + sv.drm_dd_minor = -1; /* Don't care */ + +- err = drmSetInterfaceVersion(fd, &sv); +- if (err) { +- xf86Msg(X_ERROR, "%s: failed to set DRM interface version 1.4: %s\n", +- path, strerror(-err)); +- goto out; +- } +- + /* for a delayed probe we've already added the device */ + if (delayed_index == -1) { + xf86_add_platform_device(attribs, FALSE); +@@ -69,10 +64,6 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) + if (server_fd) + xf86_platform_devices[delayed_index].flags |= XF86_PDEV_SERVER_FD; + +- buf = drmGetBusid(fd); +- xf86_platform_odev_attributes(delayed_index)->busid = XNFstrdup(buf); +- drmFreeBusid(buf); +- + v = drmGetVersion(fd); + if (!v) { + xf86Msg(X_ERROR, "%s: failed to query DRM version\n", path); +-- +2.19.0 + diff --git a/0001-modesetting-Reduce-glamor-initialization-failed-mess.patch b/0001-modesetting-Reduce-glamor-initialization-failed-mess.patch new file mode 100644 index 0000000..75f47b1 --- /dev/null +++ b/0001-modesetting-Reduce-glamor-initialization-failed-mess.patch @@ -0,0 +1,37 @@ +From 41e265988a0b6ec456ddd562253e0f82a7c2ede2 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Fri, 27 Sep 2019 11:43:52 -0400 +Subject: [PATCH xserver] modesetting: Reduce "glamor initialization failed" + message to X_INFO +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This might be an error or not, for example refusing to work on llvmpipe +is normal and expected. glamor_egl_init() will print X_ERROR messages if +appropriate, so we don't need to here. + +Reviewed-by: Michel Dänzer + +(cherry picked from commit cbdde938cbaf604741cd057fac743859ada342ec) +Signed-off-by: Michel Dänzer +--- + hw/xfree86/drivers/modesetting/driver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c +index 2aaea5f7d..783d53eaa 100644 +--- a/hw/xfree86/drivers/modesetting/driver.c ++++ b/hw/xfree86/drivers/modesetting/driver.c +@@ -772,7 +772,7 @@ try_enable_glamor(ScrnInfoPtr pScrn) + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "glamor initialized\n"); + ms->drmmode.glamor = TRUE; + } else { +- xf86DrvMsg(pScrn->scrnIndex, X_ERROR, ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "glamor initialization failed\n"); + } + } else { +-- +2.26.2 + diff --git a/0001-mustard-Add-DRI2-fallback-driver-mappings-for-i965-a.patch b/0001-mustard-Add-DRI2-fallback-driver-mappings-for-i965-a.patch new file mode 100644 index 0000000..395096c --- /dev/null +++ b/0001-mustard-Add-DRI2-fallback-driver-mappings-for-i965-a.patch @@ -0,0 +1,28 @@ +From efb4bc5b3da511d128144840d7eb3cf3c7cfa0ae Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 3 Sep 2019 12:10:37 -0400 +Subject: [PATCH] mustard: Add DRI2 fallback driver mappings for i965 and + radeonsi + +--- + hw/xfree86/dri2/pci_ids/pci_id_driver_map.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +index 689a570..3825f52 100644 +--- a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h ++++ b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +@@ -45,8 +45,10 @@ static const struct { + int num_chips_ids; + } driver_map[] = { + { 0x8086, "i965", "va_gl", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, ++ { 0x8086, "i965", "va_gl", NULL, -1 }, + { 0x1002, "r600","r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, + { 0x1002, "radeonsi", "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, ++ { 0x1002, "radeonsi", "radeonsi", NULL, -1 }, + { 0x10de, "nouveau", "nouveau", NULL, -1 }, + { 0x1af4, "virtio_gpu", "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, + { 0x15ad, "vmwgfx", "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, +-- +2.23.0 + diff --git a/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL8.patch b/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL8.patch new file mode 100644 index 0000000..67bcbce --- /dev/null +++ b/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL8.patch @@ -0,0 +1,278 @@ +From b6e50ece375b6b1fbe053b30b52fc40dde5c682b Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 13 Nov 2018 10:11:36 -0500 +Subject: [PATCH] mustard: Don't probe for drivers not shipped in RHEL8 + +As with RHEL7, this is mostly to keep spurious probe messages out of the +X log and prevent questions like "why isn't it loading mga on my +G200SE" or "why isn't it loading radeon_dri.so on my RN50". +--- + hw/xfree86/common/xf86pciBus.c | 162 -------------------- + hw/xfree86/dri2/pci_ids/pci_id_driver_map.h | 32 ---- + 2 files changed, 194 deletions(-) + +diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c +index b7f9999..398ed45 100644 +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -1074,107 +1074,12 @@ xf86VideoPtrToDriverList(struct pci_device *dev, XF86MatchedDrivers *md) + const char *driverList[5] = { NULL, NULL, NULL, NULL, NULL }; + + switch (dev->vendor_id) { +- /* AMD Geode LX */ +- case 0x1022: +- if (dev->device_id == 0x2081) +- driverList[0] = "geode"; +- break; +- /* older Geode products acquired by AMD still carry an NSC vendor_id */ +- case 0x100b: +- if (dev->device_id == 0x0030) { +- /* NSC Geode GX2 specifically */ +- driverList[0] = "geode"; +- /* GX2 support started its life in the NSC tree and was later +- forked by AMD for GEODE so we keep it as a backup */ +- driverList[1] = "nsc"; +- } +- else +- /* other NSC variant e.g. 0x0104 (SC1400), 0x0504 (SCx200) */ +- driverList[0] = "nsc"; +- break; +- /* Cyrix Geode GX1 */ +- case 0x1078: +- if (dev->device_id == 0x0104) +- driverList[0] = "cyrix"; +- break; +- case 0x1142: +- driverList[0] = "apm"; +- break; +- case 0xedd8: +- driverList[0] = "ark"; +- break; +- case 0x1a03: +- driverList[0] = "ast"; +- break; + case 0x1002: + driverList[0] = "ati"; + break; +- case 0x102c: +- driverList[0] = "chips"; +- break; +- case 0x1013: +- driverList[0] = "cirrus"; +- break; +- case 0x3d3d: +- driverList[0] = "glint"; +- break; +- case 0x105d: +- driverList[0] = "i128"; +- break; + case 0x8086: + switch (dev->device_id) + { +- /* Intel i740 */ +- case 0x00d1: +- case 0x7800: +- driverList[0] = "i740"; +- break; +- /* GMA500/Poulsbo */ +- case 0x8108: +- case 0x8109: +- /* Try psb driver on Poulsbo - if available */ +- driverList[0] = "psb"; +- driverList[1] = "psb_drv"; +- break; +- /* GMA600/Oaktrail */ +- case 0x4100: +- case 0x4101: +- case 0x4102: +- case 0x4103: +- case 0x4104: +- case 0x4105: +- case 0x4106: +- case 0x4107: +- /* Atom E620/Oaktrail */ +- case 0x4108: +- /* Medfield */ +- case 0x0130: +- case 0x0131: +- case 0x0132: +- case 0x0133: +- case 0x0134: +- case 0x0135: +- case 0x0136: +- case 0x0137: +- /* GMA 3600/CDV */ +- case 0x0be0: +- case 0x0be1: +- case 0x0be2: +- case 0x0be3: +- case 0x0be4: +- case 0x0be5: +- case 0x0be6: +- case 0x0be7: +- case 0x0be8: +- case 0x0be9: +- case 0x0bea: +- case 0x0beb: +- case 0x0bec: +- case 0x0bed: +- case 0x0bee: +- case 0x0bef: +- /* Use fbdev/vesa driver on Oaktrail, Medfield, CDV */ +- break; + /* Default to intel only on pre-gen4 chips */ + case 0x3577: + case 0x2562: +@@ -1196,14 +1101,7 @@ xf86VideoPtrToDriverList(struct pci_device *dev, XF86MatchedDrivers *md) + break; + } + break; +- case 0x102b: +- driverList[0] = "mga"; +- break; +- case 0x10c8: +- driverList[0] = "neomagic"; +- break; + case 0x10de: +- case 0x12d2: + { + int idx = 0; + +@@ -1229,77 +1127,17 @@ xf86VideoPtrToDriverList(struct pci_device *dev, XF86MatchedDrivers *md) + + driverList[idx++] = "nouveau"; + #endif +- driverList[idx++] = "nv"; + break; + } +- case 0x1106: +- driverList[0] = "openchrome"; +- break; + case 0x1b36: + driverList[0] = "qxl"; + break; +- case 0x1163: +- driverList[0] = "rendition"; +- break; +- case 0x5333: +- switch (dev->device_id) { +- case 0x88d0: +- case 0x88d1: +- case 0x88f0: +- case 0x8811: +- case 0x8812: +- case 0x8814: +- case 0x8901: +- driverList[0] = "s3"; +- break; +- case 0x5631: +- case 0x883d: +- case 0x8a01: +- case 0x8a10: +- case 0x8c01: +- case 0x8c03: +- case 0x8904: +- case 0x8a13: +- driverList[0] = "s3virge"; +- break; +- default: +- driverList[0] = "savage"; +- break; +- } +- break; +- case 0x1039: +- driverList[0] = "sis"; +- break; +- case 0x126f: +- driverList[0] = "siliconmotion"; +- break; +- case 0x121a: +- if (dev->device_id < 0x0003) +- driverList[0] = "voodoo"; +- else +- driverList[0] = "tdfx"; +- break; +- case 0x1011: +- driverList[0] = "tga"; +- break; +- case 0x1023: +- driverList[0] = "trident"; +- break; +- case 0x100c: +- driverList[0] = "tseng"; +- break; + case 0x80ee: + driverList[0] = "vboxvideo"; + break; + case 0x15ad: + driverList[0] = "vmware"; + break; +- case 0x18ca: +- if (dev->device_id == 0x47) +- driverList[0] = "xgixp"; +- else +- driverList[0] = "xgi"; +- break; + default: + break; + } +diff --git a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +index 7036d10..689a570 100644 +--- a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h ++++ b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +@@ -7,38 +7,12 @@ + #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) + #endif + +-static const int i915_chip_ids[] = { +-#define CHIPSET(chip, desc, name) chip, +-#include "pci_ids/i915_pci_ids.h" +-#undef CHIPSET +-}; +- + static const int i965_chip_ids[] = { + #define CHIPSET(chip, family, name) chip, + #include "pci_ids/i965_pci_ids.h" + #undef CHIPSET + }; + +-#ifndef DRIVER_MAP_GALLIUM_ONLY +-static const int r100_chip_ids[] = { +-#define CHIPSET(chip, name, family) chip, +-#include "pci_ids/radeon_pci_ids.h" +-#undef CHIPSET +-}; +- +-static const int r200_chip_ids[] = { +-#define CHIPSET(chip, name, family) chip, +-#include "pci_ids/r200_pci_ids.h" +-#undef CHIPSET +-}; +-#endif +- +-static const int r300_chip_ids[] = { +-#define CHIPSET(chip, name, family) chip, +-#include "pci_ids/r300_pci_ids.h" +-#undef CHIPSET +-}; +- + static const int r600_chip_ids[] = { + #define CHIPSET(chip, name, family) chip, + #include "pci_ids/r600_pci_ids.h" +@@ -70,13 +44,7 @@ static const struct { + const int *chip_ids; + int num_chips_ids; + } driver_map[] = { +- { 0x8086, "i915", "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, + { 0x8086, "i965", "va_gl", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, +-#ifndef DRIVER_MAP_GALLIUM_ONLY +- { 0x1002, "radeon", "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) }, +- { 0x1002, "r200", "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) }, +-#endif +- { 0x1002, "r300", "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, + { 0x1002, "r600","r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, + { 0x1002, "radeonsi", "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, + { 0x10de, "nouveau", "nouveau", NULL, -1 }, +-- +2.19.1 + diff --git a/0001-mustard-Work-around-broken-fbdev-headers.patch b/0001-mustard-Work-around-broken-fbdev-headers.patch new file mode 100644 index 0000000..fd4e2e2 --- /dev/null +++ b/0001-mustard-Work-around-broken-fbdev-headers.patch @@ -0,0 +1,34 @@ +From a4fc2f3a55776018eda20e09c11b3710f8f0e542 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Fri, 26 Oct 2018 14:16:17 -0400 +Subject: [PATCH xserver] mustard: Work around broken fbdev headers + +This configure check is somewhat pointless as we have our own copy of +the fbdev ioctl declarations. There's also a bug in the version of the +kernel headers I happen to want to build against, where an IS_ENABLED() +escaped into uapi like it oughtn't. + +Nerf the test so we build the right fbdevhw code. + +Signed-off-by: Adam Jackson +--- + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 57a2331024..2b8477ed61 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -197,8 +197,7 @@ AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h sys/agpgart.h], AGP=yes) + AM_CONDITIONAL(AGP, [test "x$AGP" = xyes]) + + dnl fbdev header +-AC_CHECK_HEADERS([linux/fb.h], FBDEV=yes) +-AM_CONDITIONAL(FBDEVHW, [test "x$FBDEV" = xyes]) ++AM_CONDITIONAL(FBDEVHW, true) + + dnl FreeBSD kldload support (sys/linker.h) + AC_CHECK_HEADERS([sys/linker.h], +-- +2.19.1 + diff --git a/0001-present-Check-for-NULL-to-prevent-crash.patch b/0001-present-Check-for-NULL-to-prevent-crash.patch new file mode 100644 index 0000000..894ad0e --- /dev/null +++ b/0001-present-Check-for-NULL-to-prevent-crash.patch @@ -0,0 +1,43 @@ +From 94b4a3d45451d29e9539ea234ce8b5e9ed58546c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= +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ł +Tested-by: Aaron Plattner +(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 + diff --git a/0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch b/0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch new file mode 100644 index 0000000..b53c7bf --- /dev/null +++ b/0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch @@ -0,0 +1,35 @@ +From acc50e6097d51fec0c6c34d84c35018a50c52d5a Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:00 +0200 +Subject: [PATCH xserver 1/4] record: Fix out of bounds access in + SwapCreateRegister() + +ZDI-CAN-14952, CVE-2021-4011 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +(cherry picked from commit e56f61c79fc3cee26d83cda0f84ae56d5979f768) +--- + record/record.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/record/record.c b/record/record.c +index 05d751ac2..a8aec23bd 100644 +--- a/record/record.c ++++ b/record/record.c +@@ -2515,8 +2515,8 @@ SwapCreateRegister(ClientPtr client, xRecordRegisterClientsReq * stuff) + swapl(pClientID); + } + if (stuff->nRanges > +- client->req_len - bytes_to_int32(sz_xRecordRegisterClientsReq) +- - stuff->nClients) ++ (client->req_len - bytes_to_int32(sz_xRecordRegisterClientsReq) ++ - stuff->nClients) / bytes_to_int32(sz_xRecordRange)) + return BadLength; + RecordSwapRanges((xRecordRange *) pClientID, stuff->nRanges); + return Success; +-- +2.33.1 + diff --git a/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch b/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch new file mode 100644 index 0000000..cce0348 --- /dev/null +++ b/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch @@ -0,0 +1,152 @@ +From acf5a0100c98a040e5e07a79ecf4a83627da770e Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 23 Mar 2017 12:54:07 +0100 +Subject: [PATCH xserver] xf86: dri2: Use va_gl as vdpau_driver for Intel i965 + GPUs + +The modesetting driver (which now often is used with Intel GPUs), +relies on dri2_probe_driver_name() to get the dri and vdpau driver +names, before this commit it would always assign the same name to +the 2 names. But the vdpau driver for i965 GPUs should be va_gl +(i915 does not support vdpau at all). + +This commit modifies the used lookup table and dri2_probe_driver_name() +to set the vdpau_driver to va_gl for i965 GPUs, it leaves the 2 +names the same for all other GPUs. + +Note this commit adds a FIXME comment for a memory leak in +dri2_probe_driver_name(), that leak was already present and fixing +it falls outside of the scope of this commit. + +BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1413733 +Cc: kwizart@gmail.com +Signed-off-by: Hans de Goede +--- + hw/xfree86/dri2/dri2.c | 31 +++++++++++++-------- + hw/xfree86/dri2/pci_ids/pci_id_driver_map.h | 21 +++++++------- + 2 files changed, 31 insertions(+), 21 deletions(-) + +diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c +index 6619e3aa7..1f8ad14bc 100644 +--- a/hw/xfree86/dri2/dri2.c ++++ b/hw/xfree86/dri2/dri2.c +@@ -1437,14 +1437,18 @@ get_prime_id(void) + + #include "pci_ids/pci_id_driver_map.h" + +-static char * +-dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) ++static void ++dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info, ++ const char **dri_driver_ret, ++ const char **vdpau_driver_ret) + { + #ifdef WITH_LIBDRM + int i, j; +- char *driver = NULL; + drmDevicePtr dev; + ++ *dri_driver_ret = NULL; ++ *vdpau_driver_ret = NULL; ++ + /* For non-PCI devices and drmGetDevice fail, just assume that + * the 3D driver is named the same as the kernel driver. This is + * currently true for vc4 and msm (freedreno). +@@ -1456,12 +1460,14 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) + xf86DrvMsg(pScreen->myNum, X_ERROR, + "[DRI2] Couldn't drmGetVersion() on non-PCI device, " + "no driver name found.\n"); +- return NULL; ++ return; + } + +- driver = strndup(version->name, version->name_len); ++ /* FIXME this gets leaked */ ++ *dri_driver_ret = strndup(version->name, version->name_len); ++ *vdpau_driver_ret = *dri_driver_ret; + drmFreeVersion(version); +- return driver; ++ return; + } + + for (i = 0; driver_map[i].driver; i++) { +@@ -1469,13 +1475,15 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) + continue; + + if (driver_map[i].num_chips_ids == -1) { +- driver = strdup(driver_map[i].driver); ++ *dri_driver_ret = driver_map[i].driver; ++ *vdpau_driver_ret = driver_map[i].vdpau_driver; + goto out; + } + + for (j = 0; j < driver_map[i].num_chips_ids; j++) { + if (driver_map[i].chip_ids[j] == dev->deviceinfo.pci->device_id) { +- driver = strdup(driver_map[i].driver); ++ *dri_driver_ret = driver_map[i].driver; ++ *vdpau_driver_ret = driver_map[i].vdpau_driver; + goto out; + } + } +@@ -1487,9 +1495,9 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) + dev->deviceinfo.pci->vendor_id, dev->deviceinfo.pci->device_id); + out: + drmFreeDevice(&dev); +- return driver; + #else +- return NULL; ++ *dri_driver_ret = NULL; ++ *vdpau_driver_ret = NULL; + #endif + } + +@@ -1610,7 +1618,8 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) + if (info->driverName) { + ds->driverNames[0] = info->driverName; + } else { +- ds->driverNames[0] = ds->driverNames[1] = dri2_probe_driver_name(pScreen, info); ++ dri2_probe_driver_name(pScreen, info, ++ &ds->driverNames[0], &ds->driverNames[1]); + if (!ds->driverNames[0]) + return FALSE; + } +diff --git a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +index da7ea1c1e..7036d1003 100644 +--- a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h ++++ b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +@@ -66,21 +66,22 @@ static const int vmwgfx_chip_ids[] = { + static const struct { + int vendor_id; + const char *driver; ++ const char *vdpau_driver; + const int *chip_ids; + int num_chips_ids; + } driver_map[] = { +- { 0x8086, "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, +- { 0x8086, "i965", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, ++ { 0x8086, "i915", "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, ++ { 0x8086, "i965", "va_gl", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, + #ifndef DRIVER_MAP_GALLIUM_ONLY +- { 0x1002, "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) }, +- { 0x1002, "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) }, ++ { 0x1002, "radeon", "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) }, ++ { 0x1002, "r200", "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) }, + #endif +- { 0x1002, "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, +- { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, +- { 0x1002, "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, +- { 0x10de, "nouveau", NULL, -1 }, +- { 0x1af4, "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, +- { 0x15ad, "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, ++ { 0x1002, "r300", "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, ++ { 0x1002, "r600","r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, ++ { 0x1002, "radeonsi", "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, ++ { 0x10de, "nouveau", "nouveau", NULL, -1 }, ++ { 0x1af4, "virtio_gpu", "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, ++ { 0x15ad, "vmwgfx", "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, + { 0x0000, NULL, NULL, 0 }, + }; + +-- +2.19.0 + diff --git a/0001-xf86-logind-Fix-drm_drop_master-before-vt_reldisp.patch b/0001-xf86-logind-Fix-drm_drop_master-before-vt_reldisp.patch new file mode 100644 index 0000000..0d55af7 --- /dev/null +++ b/0001-xf86-logind-Fix-drm_drop_master-before-vt_reldisp.patch @@ -0,0 +1,167 @@ +From dafe5f6358edd557d89bb63265d6df2e1249f106 Mon Sep 17 00:00:00 2001 +From: Jocelyn Falempe +Date: Thu, 18 Nov 2021 14:45:42 +0100 +Subject: [PATCH] xf86/logind: fix call systemd_logind_vtenter after receiving + drm device resume + +logind send the resume event for input devices and drm device, +in any order. if we call vt_enter before logind resume the drm device, +it leads to a driver error, because logind has not done the +DRM_IOCTL_SET_MASTER on it. + +Keep the old workaround to make sure we call systemd_logind_vtenter at +least once if there are no platform device + +Signed-off-by: Jocelyn Falempe +Reviewed-by: Hans de Goede + +xf86/logind: Fix drm_drop_master before vt_reldisp + +When switching to VT, the ioctl DRM_DROP_MASTER must be done before +the ioctl VT_RELDISP. Otherwise the kernel can't change the modesetting +reliably, and this leads to the console not showing up in some cases, like +after unplugging a docking station with a DP or HDMI monitor. + +Before doing the VT_RELDISP, send a dbus message to logind, to +pause the drm device, so logind will do the ioctl DRM_DROP_MASTER. + +With this patch, it changes the order logind will send the resume +event, and drm will be sent last instead of first. +so there is a also fix to call systemd_logind_vtenter() at the right time. + +Signed-off-by: Jocelyn Falempe +Reviewed-by: Hans de Goede + +xf86/logind: Fix compilation error when built without logind/platform bus + +This was introduced by commit 8eb1396d + +Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1269 +Fixes: da9d012a9 - xf86/logind: Fix drm_drop_master before vt_reldisp + +Signed-off-by: Jocelyn Falempe +Reviewed-by: Hans de Goede + +xf86/logind: fix missing call to vtenter if the platform device is not paused + +If there is one platform device, which is not paused nor resumed, +systemd_logind_vtenter() will never get called. +This break suspend/resume, and switching to VT on system with Nvidia +proprietary driver. +This is a regression introduced by f5bd039633fa83 + +So now call systemd_logind_vtenter() if there are no paused +platform devices. + +Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1271 +Fixes: f5bd0396 - xf86/logind: fix call systemd_logind_vtenter after receiving drm device resume + +Signed-off-by: Jocelyn Falempe +Tested-by: Olivier Fourdan +Reviewed-by: Hans de Goede +--- + hw/xfree86/common/xf86Events.c | 4 ++ + hw/xfree86/os-support/linux/systemd-logind.c | 41 +++++++++++++++++--- + include/systemd-logind.h | 2 + + 3 files changed, 42 insertions(+), 5 deletions(-) + +diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c +index 8a800bd8f..b683d233b 100644 +--- a/hw/xfree86/common/xf86Events.c ++++ b/hw/xfree86/common/xf86Events.c +@@ -393,6 +393,10 @@ xf86VTLeave(void) + for (i = 0; i < xf86NumGPUScreens; i++) + xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + ++ if (systemd_logind_controls_session()) { ++ systemd_logind_drop_master(); ++ } ++ + if (!xf86VTSwitchAway()) + goto switch_failed; + +diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c +index 13784d15c..bd7a341f0 100644 +--- a/hw/xfree86/os-support/linux/systemd-logind.c ++++ b/hw/xfree86/os-support/linux/systemd-logind.c +@@ -302,6 +302,37 @@ cleanup: + dbus_error_free(&error); + } + ++/* ++ * Send a message to logind, to pause the drm device ++ * and ensure the drm_drop_master is done before ++ * VT_RELDISP when switching VT ++ */ ++void systemd_logind_drop_master(void) ++{ ++ int i; ++ for (i = 0; i < xf86_num_platform_devices; i++) { ++ if (xf86_platform_devices[i].flags & XF86_PDEV_SERVER_FD) { ++ dbus_int32_t major, minor; ++ struct systemd_logind_info *info = &logind_info; ++ ++ xf86_platform_devices[i].flags |= XF86_PDEV_PAUSED; ++ major = xf86_platform_odev_attributes(i)->major; ++ minor = xf86_platform_odev_attributes(i)->minor; ++ systemd_logind_ack_pause(info, minor, major); ++ } ++ } ++} ++ ++static Bool are_platform_devices_resumed(void) { ++ int i; ++ for (i = 0; i < xf86_num_platform_devices; i++) { ++ if (xf86_platform_devices[i].flags & XF86_PDEV_PAUSED) { ++ return FALSE; ++ } ++ } ++ return TRUE; ++} ++ + static DBusHandlerResult + message_filter(DBusConnection * connection, DBusMessage * message, void *data) + { +@@ -417,14 +448,14 @@ message_filter(DBusConnection * connection, DBusMessage * message, void *data) + /* info->vt_active gets set by systemd_logind_vtenter() */ + info->active = TRUE; + +- if (pdev) ++ if (pdev) { + pdev->flags &= ~XF86_PDEV_PAUSED; +- else ++ } else + systemd_logind_set_input_fd_for_all_devs(major, minor, fd, + info->vt_active); +- +- /* Always call vtenter(), in case there are only legacy video devs */ +- systemd_logind_vtenter(); ++ /* Call vtenter if all platform devices are resumed, or if there are no platform device */ ++ if (are_platform_devices_resumed()) ++ systemd_logind_vtenter(); + } + return DBUS_HANDLER_RESULT_HANDLED; + } +diff --git a/include/systemd-logind.h b/include/systemd-logind.h +index a4067d097..5c04d0130 100644 +--- a/include/systemd-logind.h ++++ b/include/systemd-logind.h +@@ -33,6 +33,7 @@ int systemd_logind_take_fd(int major, int minor, const char *path, Bool *paus); + void systemd_logind_release_fd(int major, int minor, int fd); + int systemd_logind_controls_session(void); + void systemd_logind_vtenter(void); ++void systemd_logind_drop_master(void); + #else + #define systemd_logind_init() + #define systemd_logind_fini() +@@ -40,6 +41,7 @@ void systemd_logind_vtenter(void); + #define systemd_logind_release_fd(major, minor, fd) close(fd) + #define systemd_logind_controls_session() 0 + #define systemd_logind_vtenter() ++#define systemd_logind_drop_master() + #endif + + #endif +-- +2.33.1 + diff --git a/0001-xfree86-Don-t-autoconfigure-vesa-or-fbdev.patch b/0001-xfree86-Don-t-autoconfigure-vesa-or-fbdev.patch new file mode 100644 index 0000000..e97e961 --- /dev/null +++ b/0001-xfree86-Don-t-autoconfigure-vesa-or-fbdev.patch @@ -0,0 +1,27 @@ +From e4dce2bfaf4a61dd8a8ac099638489d4fdff9024 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 29 May 2018 15:05:10 -0400 +Subject: [PATCH] xfree86: Don't autoconfigure vesa or fbdev + +Signed-off-by: Adam Jackson +--- + hw/xfree86/loader/loadmod.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c +index a6356bd..1c1c2b1 100644 +--- a/hw/xfree86/loader/loadmod.c ++++ b/hw/xfree86/loader/loadmod.c +@@ -383,6 +383,9 @@ LoaderListDir(const char *subdir, const char **patternlist) + strcpy(fp, dp->d_name); + if (!(stat(buf, &stat_buf) == 0 && S_ISREG(stat_buf.st_mode))) + continue; ++ if (!strcmp(subdir, "drivers") && ++ (strstr(dp->d_name, "vesa") || strstr(dp->d_name, "fbdev"))) ++ continue; + for (p = patterns; p->pattern; p++) { + if (regexec(&p->rex, dp->d_name, 2, match, 0) == 0 && + match[1].rm_so != -1) { +-- +2.17.0 + diff --git a/0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch b/0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch new file mode 100644 index 0000000..b7d333d --- /dev/null +++ b/0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch @@ -0,0 +1,27 @@ +From 1070ffa0953e9200688fc8fae11e3ab0680b86f2 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 9 Oct 2018 12:28:48 -0400 +Subject: [PATCH xserver] xfree86: LeaveVT from xf86CrtcCloseScreen + +Signed-off-by: Adam Jackson +Signed-off-by: Olivier Fourdan +--- + hw/xfree86/modes/xf86Crtc.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c +index 37a45bb3af..45d325f4d2 100644 +--- a/hw/xfree86/modes/xf86Crtc.c ++++ b/hw/xfree86/modes/xf86Crtc.c +@@ -776,6 +776,8 @@ xf86CrtcCloseScreen(ScreenPtr screen) + crtc->randr_crtc = NULL; + } + ++ scrn->LeaveVT(scrn); ++ + screen->CloseScreen = config->CloseScreen; + + xf86RotateCloseScreen(screen); +-- +2.19.0 + diff --git a/0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch b/0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch new file mode 100644 index 0000000..aeed6f6 --- /dev/null +++ b/0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch @@ -0,0 +1,136 @@ +From ff91c696ff8f5f56da40e107cb5c321539758a81 Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Tue, 16 Oct 2018 09:32:13 +0200 +Subject: [PATCH xserver] xfree86: Only switch to original VT if it is active. + +If the X server is terminated while its VT is not active, it should +not change the current VT. + +v2: Query current state in xf86CloseConsole using VT_GETSTATE instead of + keeping track in xf86VTEnter/xf86VTLeave/etc. +--- + hw/xfree86/os-support/linux/lnx_init.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c +index 039dc4a4d..358d89f0f 100644 +--- a/hw/xfree86/os-support/linux/lnx_init.c ++++ b/hw/xfree86/os-support/linux/lnx_init.c +@@ -272,101 +272,111 @@ xf86OpenConsole(void) + xf86SetConsoleHandler(drain_console, NULL); + } + + nTty = tty_attr; + nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); + nTty.c_oflag = 0; + nTty.c_cflag = CREAD | CS8; + nTty.c_lflag = 0; + nTty.c_cc[VTIME] = 0; + nTty.c_cc[VMIN] = 1; + cfsetispeed(&nTty, 9600); + cfsetospeed(&nTty, 9600); + tcsetattr(xf86Info.consoleFd, TCSANOW, &nTty); + } + } + else { /* serverGeneration != 1 */ + if (!xf86Info.ShareVTs && xf86Info.autoVTSwitch) { + /* now get the VT */ + if (!switch_to(xf86Info.vtno, "xf86OpenConsole")) + FatalError("xf86OpenConsole: Switching VT failed\n"); + } + } + } + + #pragma GCC diagnostic pop + + void + xf86CloseConsole(void) + { + struct vt_mode VT; ++ struct vt_stat vts; + int ret; + + if (xf86Info.ShareVTs) { + close(xf86Info.consoleFd); + return; + } + + /* + * unregister the drain_console handler + * - what to do if someone else changed it in the meantime? + */ + xf86SetConsoleHandler(NULL, NULL); + + /* Back to text mode ... */ + SYSCALL(ret = ioctl(xf86Info.consoleFd, KDSETMODE, KD_TEXT)); + if (ret < 0) + xf86Msg(X_WARNING, "xf86CloseConsole: KDSETMODE failed: %s\n", + strerror(errno)); + + SYSCALL(ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode)); + tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr); + + SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETMODE, &VT)); + if (ret < 0) + xf86Msg(X_WARNING, "xf86CloseConsole: VT_GETMODE failed: %s\n", + strerror(errno)); + else { + /* set dflt vt handling */ + VT.mode = VT_AUTO; + SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_SETMODE, &VT)); + if (ret < 0) + xf86Msg(X_WARNING, "xf86CloseConsole: VT_SETMODE failed: %s\n", + strerror(errno)); + } + + if (xf86Info.autoVTSwitch) { + /* +- * Perform a switch back to the active VT when we were started +- */ ++ * Perform a switch back to the active VT when we were started if our ++ * vt is active now. ++ */ + if (activeVT >= 0) { +- switch_to(activeVT, "xf86CloseConsole"); ++ SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts)); ++ if (ret < 0) { ++ xf86Msg(X_WARNING, "xf86OpenConsole: VT_GETSTATE failed: %s\n", ++ strerror(errno)); ++ } else { ++ if (vts.v_active == xf86Info.vtno) { ++ switch_to(activeVT, "xf86CloseConsole"); ++ } ++ } + activeVT = -1; + } + } + close(xf86Info.consoleFd); /* make the vt-manager happy */ + } + + #define CHECK_FOR_REQUIRED_ARGUMENT() \ + if (((i + 1) >= argc) || (!argv[i + 1])) { \ + ErrorF("Required argument to %s not specified\n", argv[i]); \ + UseMsg(); \ + FatalError("Required argument to %s not specified\n", argv[i]); \ + } + + int + xf86ProcessArgument(int argc, char *argv[], int i) + { + /* + * Keep server from detaching from controlling tty. This is useful + * when debugging (so the server can receive keyboard signals. + */ + if (!strcmp(argv[i], "-keeptty")) { + KeepTty = TRUE; + return 1; + } + + if ((argv[i][0] == 'v') && (argv[i][1] == 't')) { + if (sscanf(argv[i], "vt%2d", &xf86Info.vtno) == 0) { + UseMsg(); + xf86Info.vtno = -1; + return 0; +-- +2.18.4 + diff --git a/0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch b/0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch new file mode 100644 index 0000000..3645d6c --- /dev/null +++ b/0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch @@ -0,0 +1,34 @@ +From 71703e4e8bd00719eefad53c2ed6c604079f87ea Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Wed, 17 Oct 2018 09:00:59 +1000 +Subject: [PATCH xserver] xfree86: ensure the readlink buffer is + null-terminated + +Signed-off-by: Peter Hutterer +Reviewed-by: Dave Airlie +--- + hw/xfree86/fbdevhw/fbdevhw.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c +index 95089515c..f146ff4a4 100644 +--- a/hw/xfree86/fbdevhw/fbdevhw.c ++++ b/hw/xfree86/fbdevhw/fbdevhw.c +@@ -331,12 +331,12 @@ fbdev_open(int scrnIndex, const char *dev, char **namep) + + /* only touch non-PCI devices on this path */ + { +- char buf[PATH_MAX]; ++ char buf[PATH_MAX] = {0}; + char *sysfs_path = NULL; + char *node = strrchr(dev, '/') + 1; + + if (asprintf(&sysfs_path, "/sys/class/graphics/%s", node) < 0 || +- readlink(sysfs_path, buf, sizeof(buf)) < 0 || ++ readlink(sysfs_path, buf, sizeof(buf) - 1) < 0 || + strstr(buf, "devices/pci")) { + free(sysfs_path); + close(fd); +-- +2.19.1 + diff --git a/0001-xfree86-try-harder-to-span-on-multihead.patch b/0001-xfree86-try-harder-to-span-on-multihead.patch new file mode 100644 index 0000000..4303409 --- /dev/null +++ b/0001-xfree86-try-harder-to-span-on-multihead.patch @@ -0,0 +1,190 @@ +From 326f992a90dae7a747da45626e588fa3c1dfa5dc Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 21 Sep 2018 14:38:31 -0400 +Subject: [PATCH xserver] xfree86: try harder to span on multihead + +right now if one of the monitors can't give +it's native resolution because of bandwidth limitations, +X decides to avoid spanning and instead clone. + +That's suboptimal, spanning is normally the right +thing to do (with the exception of some projector +use cases and other edge cases) + +This commit tries harder to make spanning work. +--- + hw/xfree86/modes/xf86Crtc.c | 33 +++++++++++++++++++++++++++++---- + 1 file changed, 29 insertions(+), 4 deletions(-) + +diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c +index 37a45bb3a..686cb51b8 100644 +--- a/hw/xfree86/modes/xf86Crtc.c ++++ b/hw/xfree86/modes/xf86Crtc.c +@@ -2132,135 +2132,160 @@ bestModeForAspect(xf86CrtcConfigPtr config, Bool *enabled, float aspect) + if (test->HDisplay != mode->HDisplay || + test->VDisplay != mode->VDisplay) { + test = NULL; + break; + } + } + + /* if we didn't match it on all outputs, try the next one */ + if (!test) + continue; + + /* if it's bigger than the last one, save it */ + if (!match || (test->HDisplay > match->HDisplay)) + match = test; + } + + /* return the biggest one found */ + return match; + } + + static int + numEnabledOutputs(xf86CrtcConfigPtr config, Bool *enabled) + { + int i = 0, p; + + for (i = 0, p = -1; nextEnabledOutput(config, enabled, &p); i++) ; + + return i; + } + ++static DisplayModePtr ++findReasonableMode(xf86CrtcConfigPtr config, xf86OutputPtr output, Bool *enabled, int width, int height) ++{ ++ DisplayModePtr mode = ++ xf86OutputHasPreferredMode(output, width, height); ++ ++ /* if there's no preferred mode, just try to find a reasonable one */ ++ if (!mode) { ++ float aspect = 0.0; ++ DisplayModePtr a = NULL, b = NULL; ++ ++ if (output->mm_height) ++ aspect = (float) output->mm_width / ++ (float) output->mm_height; ++ ++ a = bestModeForAspect(config, enabled, 4.0/3.0); ++ if (aspect) ++ b = bestModeForAspect(config, enabled, aspect); ++ ++ mode = biggestMode(a, b); ++ } ++ ++ return mode; ++} ++ + static Bool + xf86TargetRightOf(ScrnInfoPtr scrn, xf86CrtcConfigPtr config, + DisplayModePtr *modes, Bool *enabled, + int width, int height) + { + int o; + int w = 0; + Bool has_tile = FALSE; + uint32_t configured_outputs; + + xf86GetOptValBool(config->options, OPTION_PREFER_CLONEMODE, + &scrn->preferClone); + if (scrn->preferClone) + return FALSE; + + if (numEnabledOutputs(config, enabled) < 2) + return FALSE; + + for (o = -1; nextEnabledOutput(config, enabled, &o); ) { + DisplayModePtr mode = +- xf86OutputHasPreferredMode(config->output[o], width, height); ++ findReasonableMode(config, config->output[o], enabled, width, height); + + if (!mode) + return FALSE; + + w += mode->HDisplay; + } + + if (w > width) + return FALSE; + + w = 0; + configured_outputs = 0; + + for (o = -1; nextEnabledOutput(config, enabled, &o); ) { + DisplayModePtr mode = +- xf86OutputHasPreferredMode(config->output[o], width, height); ++ findReasonableMode(config, config->output[o], enabled, width, height); + + if (configured_outputs & (1 << o)) + continue; + + if (config->output[o]->tile_info.group_id) { + has_tile = TRUE; + continue; + } + + config->output[o]->initial_x = w; + w += mode->HDisplay; + + configured_outputs |= (1 << o); + modes[o] = mode; + } + + if (has_tile) { + for (o = -1; nextEnabledOutput(config, enabled, &o); ) { + int ht, vt, ot; + int add_x, cur_x = w; + struct xf86CrtcTileInfo *tile_info = &config->output[o]->tile_info, *this_tile; + if (configured_outputs & (1 << o)) + continue; + if (!tile_info->group_id) + continue; + + if (tile_info->tile_h_loc != 0 && tile_info->tile_v_loc != 0) + continue; + + for (ht = 0; ht < tile_info->num_h_tile; ht++) { + int cur_y = 0; + add_x = 0; + for (vt = 0; vt < tile_info->num_v_tile; vt++) { + + for (ot = -1; nextEnabledOutput(config, enabled, &ot); ) { +- + DisplayModePtr mode = +- xf86OutputHasPreferredMode(config->output[ot], width, height); ++ findReasonableMode(config, config->output[ot], enabled, width, height); ++ + if (!config->output[ot]->tile_info.group_id) + continue; + + this_tile = &config->output[ot]->tile_info; + if (this_tile->group_id != tile_info->group_id) + continue; + + if (this_tile->tile_h_loc != ht || + this_tile->tile_v_loc != vt) + continue; + + config->output[ot]->initial_x = cur_x; + config->output[ot]->initial_y = cur_y; + + if (vt == 0) + add_x = this_tile->tile_h_size; + cur_y += this_tile->tile_v_size; + configured_outputs |= (1 << ot); + modes[ot] = mode; + } + } + cur_x += add_x; + } + w = cur_x; + } + } + return TRUE; + } + + static Bool +-- +2.17.1 + diff --git a/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch b/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch new file mode 100644 index 0000000..be83429 --- /dev/null +++ b/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch @@ -0,0 +1,52 @@ +From aa2f34d80ef3118eae0cce73b610c36cdcb978fe Mon Sep 17 00:00:00 2001 +From: Ben Skeggs +Date: Sat, 22 Apr 2017 02:26:28 +1000 +Subject: [PATCH xserver] xfree86: use modesetting driver by default on GeForce + 8 and newer + +Signed-off-by: Ben Skeggs +--- + hw/xfree86/common/xf86pciBus.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c +index 8158c2b62..78d1c947d 100644 +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include "os.h" + #include "Pci.h" + #include "xf86.h" +@@ -1190,6 +1191,25 @@ xf86VideoPtrToDriverList(struct pci_device *dev, + int idx = 0; + + #if defined(__linux__) || defined(__NetBSD__) ++ char busid[32]; ++ int fd; ++ ++ snprintf(busid, sizeof(busid), "pci:%04x:%02x:%02x.%d", ++ dev->domain, dev->bus, dev->dev, dev->func); ++ ++ /* 'modesetting' is preferred for GeForce 8 and newer GPUs */ ++ fd = drmOpenWithType("nouveau", busid, DRM_NODE_RENDER); ++ if (fd >= 0) { ++ uint64_t args[] = { 11 /* NOUVEAU_GETPARAM_CHIPSET_ID */, 0 }; ++ int ret = drmCommandWriteRead(fd, 0 /* DRM_NOUVEAU_GETPARAM */, ++ &args, sizeof(args)); ++ drmClose(fd); ++ if (ret == 0) { ++ if (args[1] == 0x050 || args[1] >= 0x80) ++ break; ++ } ++ } ++ + driverList[idx++] = "nouveau"; + #endif + driverList[idx++] = "nv"; +-- +2.12.2 + diff --git a/0002-xfixes-Fix-out-of-bounds-access-in-ProcXFixesCreateP.patch b/0002-xfixes-Fix-out-of-bounds-access-in-ProcXFixesCreateP.patch new file mode 100644 index 0000000..35f88ed --- /dev/null +++ b/0002-xfixes-Fix-out-of-bounds-access-in-ProcXFixesCreateP.patch @@ -0,0 +1,44 @@ +From 6bb8aeb30a2686facc48733016caade97ece10ad Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:01 +0200 +Subject: [PATCH xserver 2/4] xfixes: Fix out of bounds access in + *ProcXFixesCreatePointerBarrier() + +ZDI-CAN-14950, CVE-2021-4009 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +(cherry picked from commit b5196750099ae6ae582e1f46bd0a6dad29550e02) +--- + xfixes/cursor.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/xfixes/cursor.c b/xfixes/cursor.c +index d4b68f3af..5f531a89a 100644 +--- a/xfixes/cursor.c ++++ b/xfixes/cursor.c +@@ -1010,7 +1010,8 @@ ProcXFixesCreatePointerBarrier(ClientPtr client) + { + REQUEST(xXFixesCreatePointerBarrierReq); + +- REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices)); ++ REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, ++ pad_to_int32(stuff->num_devices * sizeof(CARD16))); + LEGAL_NEW_RESOURCE(stuff->barrier, client); + + return XICreatePointerBarrier(client, stuff); +@@ -1027,7 +1028,8 @@ SProcXFixesCreatePointerBarrier(ClientPtr client) + + swaps(&stuff->length); + swaps(&stuff->num_devices); +- REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices)); ++ REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, ++ pad_to_int32(stuff->num_devices * sizeof(CARD16))); + + swapl(&stuff->barrier); + swapl(&stuff->window); +-- +2.33.1 + diff --git a/0003-Xext-Fix-out-of-bounds-access-in-SProcScreenSaverSus.patch b/0003-Xext-Fix-out-of-bounds-access-in-SProcScreenSaverSus.patch new file mode 100644 index 0000000..698dea2 --- /dev/null +++ b/0003-Xext-Fix-out-of-bounds-access-in-SProcScreenSaverSus.patch @@ -0,0 +1,34 @@ +From 67425fcab50ef24a5617e109897f38876dd81277 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:02 +0200 +Subject: [PATCH xserver 3/4] Xext: Fix out of bounds access in + SProcScreenSaverSuspend() + +ZDI-CAN-14951, CVE-2021-4010 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +(cherry picked from commit 6c4c53010772e3cb4cb8acd54950c8eec9c00d21) +--- + Xext/saver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Xext/saver.c b/Xext/saver.c +index c27a66c80..c23907dbb 100644 +--- a/Xext/saver.c ++++ b/Xext/saver.c +@@ -1351,8 +1351,8 @@ SProcScreenSaverSuspend(ClientPtr client) + REQUEST(xScreenSaverSuspendReq); + + swaps(&stuff->length); +- swapl(&stuff->suspend); + REQUEST_SIZE_MATCH(xScreenSaverSuspendReq); ++ swapl(&stuff->suspend); + return ProcScreenSaverSuspend(client); + } + +-- +2.33.1 + diff --git a/0004-render-Fix-out-of-bounds-access-in-SProcRenderCompos.patch b/0004-render-Fix-out-of-bounds-access-in-SProcRenderCompos.patch new file mode 100644 index 0000000..f2de693 --- /dev/null +++ b/0004-render-Fix-out-of-bounds-access-in-SProcRenderCompos.patch @@ -0,0 +1,53 @@ +From 35b4681c79480d980bd8dcba390146aad7817c47 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:03 +0200 +Subject: [PATCH xserver 4/4] render: Fix out of bounds access in + SProcRenderCompositeGlyphs() + +ZDI-CAN-14192, CVE-2021-4008 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +(cherry picked from commit ebce7e2d80e7c80e1dda60f2f0bc886f1106ba60) +--- + render/render.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/render/render.c b/render/render.c +index c376090ca..456f156d4 100644 +--- a/render/render.c ++++ b/render/render.c +@@ -2309,6 +2309,9 @@ SProcRenderCompositeGlyphs(ClientPtr client) + + i = elt->len; + if (i == 0xff) { ++ if (buffer + 4 > end) { ++ return BadLength; ++ } + swapl((int *) buffer); + buffer += 4; + } +@@ -2319,12 +2322,18 @@ SProcRenderCompositeGlyphs(ClientPtr client) + buffer += i; + break; + case 2: ++ if (buffer + i * 2 > end) { ++ return BadLength; ++ } + while (i--) { + swaps((short *) buffer); + buffer += 2; + } + break; + case 4: ++ if (buffer + i * 4 > end) { ++ return BadLength; ++ } + while (i--) { + swapl((int *) buffer); + buffer += 4; +-- +2.33.1 + diff --git a/06_use-intel-only-on-pre-gen4.diff b/06_use-intel-only-on-pre-gen4.diff new file mode 100644 index 0000000..4994492 --- /dev/null +++ b/06_use-intel-only-on-pre-gen4.diff @@ -0,0 +1,30 @@ +Description: Use intel ddx only on pre-gen4 hw, newer ones will fall back to modesetting +Author: Timo Aaltonen + +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -1173,7 +1173,23 @@ xf86VideoPtrToDriverList(struct pci_devi + case 0x0bef: + /* Use fbdev/vesa driver on Oaktrail, Medfield, CDV */ + break; +- default: ++ /* Default to intel only on pre-gen4 chips */ ++ case 0x3577: ++ case 0x2562: ++ case 0x3582: ++ case 0x358e: ++ case 0x2572: ++ case 0x2582: ++ case 0x258a: ++ case 0x2592: ++ case 0x2772: ++ case 0x27a2: ++ case 0x27ae: ++ case 0x29b2: ++ case 0x29c2: ++ case 0x29d2: ++ case 0xa001: ++ case 0xa011: + driverList[0] = "intel"; + break; + } diff --git a/10-quirks.conf b/10-quirks.conf new file mode 100644 index 0000000..47907d8 --- /dev/null +++ b/10-quirks.conf @@ -0,0 +1,38 @@ +# Collection of quirks and blacklist/whitelists for specific devices. + + +# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable +# http://bugs.freedesktop.org/show_bug.cgi?id=22442 +Section "InputClass" + Identifier "ThinkPad HDAPS accelerometer blacklist" + MatchProduct "ThinkPad HDAPS accelerometer data" + Option "Ignore" "on" +EndSection + +# https://bugzilla.redhat.com/show_bug.cgi?id=523914 +# Mouse does not move in PV Xen guest +# Explicitly tell evdev to not ignore the absolute axes. +Section "InputClass" + Identifier "Xen Virtual Pointer axis blacklist" + MatchProduct "Xen Virtual Pointer" + Option "IgnoreAbsoluteAxes" "off" + Option "IgnoreRelativeAxes" "off" +EndSection + +# https://bugs.freedesktop.org/show_bug.cgi?id=55867 +# Bug 55867 - Doesn't know how to tag XI_TRACKBALL +Section "InputClass" + Identifier "Tag trackballs as XI_TRACKBALL" + MatchProduct "trackball" + MatchDriver "evdev" + Option "TypeName" "TRACKBALL" +EndSection + +# https://bugs.freedesktop.org/show_bug.cgi?id=62831 +# Bug 62831 - Mionix Naos 5000 mouse detected incorrectly +Section "InputClass" + Identifier "Tag Mionix Naos 5000 mouse XI_MOUSE" + MatchProduct "La-VIEW Technology Naos 5000 Mouse" + MatchDriver "evdev" + Option "TypeName" "MOUSE" +EndSection diff --git a/EMPTY b/EMPTY deleted file mode 100644 index 0519ecb..0000000 --- a/EMPTY +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/driver-abi-rebuild.sh b/driver-abi-rebuild.sh new file mode 100755 index 0000000..693297b --- /dev/null +++ b/driver-abi-rebuild.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Trivial script to rebuild drivers for ABI changes in the server +# Run me after a new xserver has hit the buildroot + +builddir="abi-rebuild" + +if [ -e "$builddir" ]; then + echo "Path '$builddir' exists. Move out of the way first" + exit 1 +fi + +mkdir -p $builddir +pushd $builddir + +if git config --get remote.origin.url | grep -q redhat.com ; then + pkg=rhpkg +else + pkg=fedpkg +fi + +# figure out the branch we're on +branch=$(git branch | awk '/^\*/ { print $2 }' | grep -v '^master$') +if [ $branch ]; then + branch="-b $branch" +fi + +$pkg co $branch xorg-x11-drivers +pushd xorg-x11-drivers +driverlist=$(grep ^Requires *.spec | awk '{ print $2 }') +popd + +# Things not in -drivers for whatever reason... +extradrivers="xorg-x11-drv-ivtv" + +rm -rf xorg-x11-drivers +echo $driverlist $extradrivers | xargs -n1 $pkg co $branch + +for i in xorg-x11-drv-*/ ; do + [ -e $i/dead.package ] && continue + pushd $i + rpmdev-bumpspec -c "- 1.15 ABI rebuild" *.spec + $pkg commit -c -p && $pkg build --nowait + #$pkg mockbuild + #$pkg srpm + #mockchain -r fedora-20-x86_64 -l $OLDPWD + #mockchain -r rhel-7.0-candidate-x86_64 -l $OLDPWD + + popd +done + +popd + + diff --git a/gitignore b/gitignore new file mode 100644 index 0000000..524cfc6 --- /dev/null +++ b/gitignore @@ -0,0 +1,306 @@ +Makefile +Makefile.in +.deps +.libs +.msg +*.lo +*.la +*.a +*.o +*~ +.*sw? +*.pbxuser +*.mode1v3 +obj* +build* +local +aclocal.m4 +autom4te.cache +compile +config.guess +config.log +config.status +config.sub +configure +configure.lineno +depcomp +install-sh +libtool +ltmain.sh +missing +TAGS +tags +ylwrap +xorg-server.pc +stamp-h? +do-not-use-config.h +do-not-use-config.h.in +afb/afbbltC.c +afb/afbbltCI.c +afb/afbbltG.c +afb/afbbltO.c +afb/afbbltX.c +afb/afbseg.c +afb/afbtileC.c +afb/afbtileG.c +cfb/cfb8lineCO.c +cfb/cfb8lineCP.c +cfb/cfb8lineG.c +cfb/cfb8lineX.c +cfb/cfb8segC.c +cfb/cfb8segCS.c +cfb/cfb8segX.c +cfb/cfb8setG.c +cfb/cfbbltC.c +cfb/cfbbltG.c +cfb/cfbbltO.c +cfb/cfbbltX.c +cfb/cfbfillarcC.c +cfb/cfbfillarcG.c +cfb/cfbglrop8.c +cfb/cfbply1rctC.c +cfb/cfbply1rctG.c +cfb/cfbseg.c +cfb/cfbsolidC.c +cfb/cfbsolidG.c +cfb/cfbsolidX.c +cfb/cfbtile32C.c +cfb/cfbtile32G.c +cfb/cfbtileoddC.c +cfb/cfbtileoddG.c +cfb/cfbzerarcC.c +cfb/cfbzerarcG.c +cfb/cfbzerarcX.c +cfb32/cfb8lineCO.c +cfb32/cfb8lineCP.c +cfb32/cfb8lineG.c +cfb32/cfb8lineX.c +cfb32/cfb8segC.c +cfb32/cfb8segCS.c +cfb32/cfb8segX.c +cfb32/cfb8setG.c +cfb32/cfbbltC.c +cfb32/cfbbltG.c +cfb32/cfbbltO.c +cfb32/cfbbltX.c +cfb32/cfbfillarcC.c +cfb32/cfbfillarcG.c +cfb32/cfbply1rctC.c +cfb32/cfbply1rctG.c +cfb32/cfbseg.c +cfb32/cfbsolidC.c +cfb32/cfbsolidG.c +cfb32/cfbsolidX.c +cfb32/cfbtile32C.c +cfb32/cfbtile32G.c +cfb32/cfbtileoddC.c +cfb32/cfbtileoddG.c +cfb32/cfbzerarcC.c +cfb32/cfbzerarcG.c +cfb32/cfbzerarcX.c +doc/Xserver.1x +doc/Xserver.man +hw/dmx/Xdmx +hw/dmx/Xdmx.1x +hw/dmx/config/dmxtodmx +hw/dmx/config/dmxtodmx.1x +hw/dmx/config/parser.c +hw/dmx/config/parser.h +hw/dmx/config/scanner.c +hw/dmx/config/vdltodmx +hw/dmx/config/vdltodmx.1x +hw/dmx/config/xdmxconfig +hw/dmx/config/xdmxconfig.1x +hw/dmx/examples/dmxaddinput +hw/dmx/examples/dmxaddscreen +hw/dmx/examples/dmxreconfig +hw/dmx/examples/dmxresize +hw/dmx/examples/dmxrminput +hw/dmx/examples/dmxrmscreen +hw/dmx/examples/dmxwininfo +hw/dmx/examples/ev +hw/dmx/examples/evi +hw/dmx/examples/res +hw/dmx/examples/xbell +hw/dmx/examples/xdmx +hw/dmx/examples/xinput +hw/dmx/examples/xled +hw/dmx/examples/xtest +hw/kdrive/ati/Xati +hw/kdrive/chips/Xchips +hw/kdrive/ephyr/Xephyr +hw/kdrive/epson/Xepson +hw/kdrive/fake/Xfake +hw/kdrive/fbdev/Xfbdev +hw/kdrive/i810/Xi810 +hw/kdrive/mach64/Xmach64 +hw/kdrive/mga/Xmga +hw/kdrive/neomagic/Xneomagic +hw/kdrive/nvidia/Xnvidia +hw/kdrive/pm2/Xpm2 +hw/kdrive/r128/Xr128 +hw/kdrive/sdl/Xsdl +hw/kdrive/sis300/Xsis +hw/kdrive/smi/Xsmi +hw/kdrive/vesa/Xvesa +hw/kdrive/via/Xvia +hw/vfb/Xvfb +hw/vfb/Xvfb.1x +hw/vfb/Xvfb.man +hw/xfree86/Xorg +hw/xfree86/common/xf86Build.h +hw/xfree86/common/xf86DefModeSet.c +hw/xfree86/doc/man/Xorg.1x +hw/xfree86/doc/man/Xorg.man +hw/xfree86/doc/man/xorg.conf.5x +hw/xfree86/doc/man/xorg.conf.man +hw/xfree86/exa/exa.4 +hw/xfree86/exa/exa.4x +hw/xfree86/exa/exa.man +hw/xfree86/fbdevhw/fbdevhw.4x +hw/xfree86/fbdevhw/fbdevhw.man +hw/xfree86/getconfig/cfg.man +hw/xfree86/getconfig/getconfig.1x +hw/xfree86/getconfig/getconfig.5x +hw/xfree86/getconfig/getconfig.man +hw/xfree86/os-support/xorgos.c +hw/xfree86/osandcommon.c +hw/xfree86/ramdac/xf86BitOrder.c +hw/xfree86/scanpci/xf86PciData.c +hw/xfree86/scanpci/xf86PciIds.h +hw/xfree86/utils/cvt/cvt +hw/xfree86/utils/cvt/cvt.man +hw/xfree86/utils/gtf/gtf +hw/xfree86/utils/gtf/gtf.1x +hw/xfree86/utils/gtf/gtf.man +hw/xfree86/utils/ioport/inb +hw/xfree86/utils/ioport/inl +hw/xfree86/utils/ioport/inw +hw/xfree86/utils/ioport/ioport +hw/xfree86/utils/ioport/outb +hw/xfree86/utils/ioport/outl +hw/xfree86/utils/ioport/outw +hw/xfree86/utils/pcitweak/pcitweak +hw/xfree86/utils/pcitweak/pcitweak.1x +hw/xfree86/utils/pcitweak/pcitweak.man +hw/xfree86/utils/scanpci/scanpci +hw/xfree86/utils/scanpci/scanpci.1x +hw/xfree86/utils/scanpci/scanpci.man +hw/xfree86/utils/xorgcfg/XOrgCfg +hw/xfree86/utils/xorgcfg/xorgcfg +hw/xfree86/utils/xorgcfg/xorgcfg.1x +hw/xfree86/utils/xorgcfg/xorgcfg.man +hw/xfree86/utils/xorgconfig/xorgconfig +hw/xfree86/utils/xorgconfig/xorgconfig.1x +hw/xfree86/utils/xorgconfig/xorgconfig.man +hw/xfree86/xaa/l-xaaBitmap.c +hw/xfree86/xaa/l-xaaStipple.c +hw/xfree86/xaa/l-xaaTEGlyph.c +hw/xfree86/xaa/l3-xaaBitmap.c +hw/xfree86/xaa/l3-xaaStipple.c +hw/xfree86/xaa/lf-xaaBitmap.c +hw/xfree86/xaa/lf-xaaStipple.c +hw/xfree86/xaa/lf-xaaTEGlyph.c +hw/xfree86/xaa/lf3-xaaBitmap.c +hw/xfree86/xaa/lf3-xaaStipple.c +hw/xfree86/xaa/m-xaaBitmap.c +hw/xfree86/xaa/m-xaaStipple.c +hw/xfree86/xaa/m-xaaTEGlyph.c +hw/xfree86/xaa/m3-xaaBitmap.c +hw/xfree86/xaa/m3-xaaStipple.c +hw/xfree86/xaa/mf-xaaBitmap.c +hw/xfree86/xaa/mf-xaaStipple.c +hw/xfree86/xaa/mf-xaaTEGlyph.c +hw/xfree86/xaa/mf3-xaaBitmap.c +hw/xfree86/xaa/mf3-xaaStipple.c +hw/xfree86/xaa/s-xaaDashLine.c +hw/xfree86/xaa/s-xaaLine.c +hw/xfree86/xf1bpp/maskbits.c +hw/xfree86/xf1bpp/mfbbitblt.c +hw/xfree86/xf1bpp/mfbbltC.c +hw/xfree86/xf1bpp/mfbbltCI.c +hw/xfree86/xf1bpp/mfbbltG.c +hw/xfree86/xf1bpp/mfbbltO.c +hw/xfree86/xf1bpp/mfbbltX.c +hw/xfree86/xf1bpp/mfbbres.c +hw/xfree86/xf1bpp/mfbbresd.c +hw/xfree86/xf1bpp/mfbclip.c +hw/xfree86/xf1bpp/mfbcmap.c +hw/xfree86/xf1bpp/mfbfillarc.c +hw/xfree86/xf1bpp/mfbfillrct.c +hw/xfree86/xf1bpp/mfbfillsp.c +hw/xfree86/xf1bpp/mfbfont.c +hw/xfree86/xf1bpp/mfbgc.c +hw/xfree86/xf1bpp/mfbgetsp.c +hw/xfree86/xf1bpp/mfbigbblak.c +hw/xfree86/xf1bpp/mfbigbwht.c +hw/xfree86/xf1bpp/mfbhrzvert.c +hw/xfree86/xf1bpp/mfbimage.c +hw/xfree86/xf1bpp/mfbline.c +hw/xfree86/xf1bpp/mfbmisc.c +hw/xfree86/xf1bpp/mfbpablack.c +hw/xfree86/xf1bpp/mfbpainv.c +hw/xfree86/xf1bpp/mfbpawhite.c +hw/xfree86/xf1bpp/mfbpgbblak.c +hw/xfree86/xf1bpp/mfbpgbinv.c +hw/xfree86/xf1bpp/mfbpgbwht.c +hw/xfree86/xf1bpp/mfbpixmap.c +hw/xfree86/xf1bpp/mfbplyblack.c +hw/xfree86/xf1bpp/mfbplyinv.c +hw/xfree86/xf1bpp/mfbplywhite.c +hw/xfree86/xf1bpp/mfbpntwin.c +hw/xfree86/xf1bpp/mfbpolypnt.c +hw/xfree86/xf1bpp/mfbpushpxl.c +hw/xfree86/xf1bpp/mfbscrclse.c +hw/xfree86/xf1bpp/mfbscrinit.c +hw/xfree86/xf1bpp/mfbseg.c +hw/xfree86/xf1bpp/mfbsetsp.c +hw/xfree86/xf1bpp/mfbteblack.c +hw/xfree86/xf1bpp/mfbtewhite.c +hw/xfree86/xf1bpp/mfbtileC.c +hw/xfree86/xf1bpp/mfbtileG.c +hw/xfree86/xf1bpp/mfbwindow.c +hw/xfree86/xf1bpp/mfbzerarc.c +hw/xfree86/xf4bpp/mfbseg.c +hw/xfree86/xf8_32bpp/cfbgc32.c +hw/xfree86/xf8_32bpp/cfbgc8.c +hw/xfree86/xorg.c +hw/xfree86/xorg.conf.example +hw/xfree86/xorg.conf.example.pre +hw/xnest/Xnest +hw/xnest/Xnest.1x +hw/xnest/Xnest.man +hw/xprint/Xprt +hw/xprint/config/C/print/Xprinters.ghostscript +hw/xprint/doc/Xprt.1x +hw/xprint/doc/Xprt.man +hw/xprint/dpmsstubs-wrapper.c +hw/xprint/miinitext-wrapper.c +include/dix-config.h +include/kdrive-config.h +include/xgl-config.h +include/xkb-config.h +include/xorg-config.h +include/xorg-server.h +include/xwin-config.h +mfb/mfbbltC.c +mfb/mfbbltCI.c +mfb/mfbbltG.c +mfb/mfbbltO.c +mfb/mfbbltX.c +mfb/mfbigbblak.c +mfb/mfbigbwht.c +mfb/mfbpablack.c +mfb/mfbpainv.c +mfb/mfbpawhite.c +mfb/mfbpgbblak.c +mfb/mfbpgbinv.c +mfb/mfbpgbwht.c +mfb/mfbplyblack.c +mfb/mfbplyinv.c +mfb/mfbplywhite.c +mfb/mfbseg.c +mfb/mfbteblack.c +mfb/mfbtewhite.c +mfb/mfbtileC.c +mfb/mfbtileG.c diff --git a/sources b/sources new file mode 100644 index 0000000..8b4e4a9 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (xorg-server-1.20.11.tar.bz2) = 1017015b9fd5d53788abe3641d877e6df8609841fa5c1847c0a5e133ddcc1b758a5d695304ebd36828099ec201a85b6b70b46f5ea4f81c5bd3a16fa6e175e3c2 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec new file mode 100644 index 0000000..38ea7aa --- /dev/null +++ b/xorg-x11-server.spec @@ -0,0 +1,832 @@ +# This package is an experiment in active integration of upstream SCM with +# Fedora packaging. It works something like this: +# +# The "pristine" source is actually a git repo (with no working checkout). +# The first step of %%prep is to check it out and switch to a "fedora" branch. +# If you need to add a patch to the server, just do it like a normal git +# operation, dump it with git-format-patch to a file in the standard naming +# format, and add a PatchN: line. If you want to push something upstream, +# check out the master branch, pull, cherry-pick, and push. + +# X.org requires lazy relocations to work. +%undefine _hardened_build +%undefine _strict_symbol_defs_build + +#global gitdate 20161026 +%global stable_abi 1 + +%if !0%{?gitdate} || %{stable_abi} +# Released ABI versions. Have to keep these manually in sync with the +# source because rpm is a terrible language. +%global ansic_major 0 +%global ansic_minor 4 +%global videodrv_major 24 +%global videodrv_minor 1 +%global xinput_major 24 +%global xinput_minor 1 +%global extension_major 10 +%global extension_minor 0 +%endif + +%if 0%{?gitdate} +# For git snapshots, use date for major and a serial number for minor +%global minor_serial 0 +%global git_ansic_major %{gitdate} +%global git_ansic_minor %{minor_serial} +%global git_videodrv_major %{gitdate} +%global git_videodrv_minor %{minor_serial} +%global git_xinput_major %{gitdate} +%global git_xinput_minor %{minor_serial} +%global git_extension_major %{gitdate} +%global git_extension_minor %{minor_serial} +%endif + +%global pkgname xorg-server + +Summary: X.Org X11 X server +Name: xorg-x11-server +Version: 1.20.11 +Release: 5%{?gitdate:.%{gitdate}}%{?dist} +URL: http://www.x.org +License: MIT +Group: User Interface/X + +#VCS: git:git://git.freedesktop.org/git/xorg/xserver +%if 0%{?gitdate} +# git snapshot. to recreate, run: +# ./make-git-snapshot.sh `cat commitid` +Source0: xorg-server-%{gitdate}.tar.xz +#Source0: http://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 +Source1: make-git-snapshot.sh +Source2: commitid +%else +Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 +Source1: gitignore +%endif + +Source4: 10-quirks.conf + +Source10: xserver.pamd + +# "useful" xvfb-run script +Source20: http://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xvfb-run.sh + +# for requires generation in drivers +Source30: xserver-sdk-abi-requires.release +Source31: xserver-sdk-abi-requires.git + +# maintainer convenience script +Source40: driver-abi-rebuild.sh + +# From Debian use intel ddx driver only for gen4 and older chipsets +Patch1: 06_use-intel-only-on-pre-gen4.diff +# Default to xf86-video-modesetting on GeForce 8 and newer +Patch2: 0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch +Patch3: 0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch +Patch4: 0001-Always-install-vbe-and-int10-sdk-headers.patch +# Submitted upstream, but not going anywhere +Patch5: 0001-autobind-GPUs-to-the-screen.patch +# because the display-managers are not ready yet, do not upstream +Patch6: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch + +# RHEL mustard +Patch10: 0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL8.patch +Patch11: 0001-mustard-Add-DRI2-fallback-driver-mappings-for-i965-a.patch +#Patch11: 0001-Enable-PAM-support.patch +Patch12: 0001-link-with-z-now.patch +Patch14: 0001-xfree86-Don-t-autoconfigure-vesa-or-fbdev.patch +Patch15: 0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch +Patch16: 0001-xfree86-try-harder-to-span-on-multihead.patch +Patch18: 0001-mustard-Work-around-broken-fbdev-headers.patch + +# fix to be upstreamed +Patch100: 0001-linux-Make-platform-device-probe-less-fragile.patch +Patch102: 0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch + +# fix already upstream +Patch200: 0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch +Patch201: 0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch +Patch202: 0001-modesetting-Reduce-glamor-initialization-failed-mess.patch +Patch203: 0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch +Patch204: 0001-xf86-logind-Fix-drm_drop_master-before-vt_reldisp.patch +Patch205: 0001-present-Check-for-NULL-to-prevent-crash.patch + +# CVE-2021-4011 +Patch10009: 0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch +# CVE-2021-4009 +Patch10010: 0002-xfixes-Fix-out-of-bounds-access-in-ProcXFixesCreateP.patch +# CVE-2021-4010 +Patch10011: 0003-Xext-Fix-out-of-bounds-access-in-SProcScreenSaverSus.patch +# CVE-2021-4008 +Patch10012: 0004-render-Fix-out-of-bounds-access-in-SProcRenderCompos.patch + +BuildRequires: systemtap-sdt-devel +BuildRequires: git +BuildRequires: automake autoconf libtool pkgconfig +BuildRequires: xorg-x11-util-macros >= 1.17 + +BuildRequires: xorg-x11-proto-devel >= 7.7-10 +BuildRequires: xorg-x11-font-utils >= 7.2-11 + +BuildRequires: dbus-devel libepoxy-devel systemd-devel +BuildRequires: xorg-x11-xtrans-devel >= 1.3.2 +BuildRequires: libXfont2-devel libXau-devel libxkbfile-devel libXres-devel +BuildRequires: libfontenc-devel libXtst-devel libXdmcp-devel +BuildRequires: libX11-devel libXext-devel +BuildRequires: libXinerama-devel libXi-devel + +# DMX config utils buildreqs. +BuildRequires: libXt-devel libdmx-devel libXmu-devel libXrender-devel +BuildRequires: libXi-devel libXpm-devel libXaw-devel libXfixes-devel + +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(xshmfence) >= 1.1 +BuildRequires: libXv-devel +BuildRequires: pixman-devel >= 0.30.0 +BuildRequires: libpciaccess-devel >= 0.13.1 openssl-devel bison flex flex-devel +BuildRequires: mesa-libGL-devel >= 9.2 +BuildRequires: mesa-libEGL-devel +BuildRequires: mesa-libgbm-devel +# XXX silly... +BuildRequires: libdrm-devel >= 2.4.0 kernel-headers +BuildRequires: pam-devel +BuildRequires: audit-libs-devel libselinux-devel >= 2.0.86-1 +BuildRequires: libudev-devel +# libunwind is Exclusive for the following arches +%ifarch aarch64 %{arm} hppa ia64 mips ppc ppc64 %{ix86} x86_64 +%if !0%{?rhel} +BuildRequires: libunwind-devel +%endif +%endif + +BuildRequires: pkgconfig(xcb-aux) pkgconfig(xcb-image) pkgconfig(xcb-icccm) +BuildRequires: pkgconfig(xcb-keysyms) pkgconfig(xcb-renderutil) + +%description +X.Org X11 X server + + +%package common +Summary: Xorg server common files +Group: User Interface/X +Requires: pixman >= 0.30.0 +Requires: xkeyboard-config xkbcomp + +%description common +Common files shared among all X servers. + + +%package Xorg +Summary: Xorg X server +Group: User Interface/X +Provides: Xorg = %{version}-%{release} +Provides: Xserver +# HdG: This should be moved to the wrapper package once the wrapper gets +# its own sub-package: +Provides: xorg-x11-server-wrapper = %{version}-%{release} +%if !0%{?gitdate} || %{stable_abi} +Provides: xserver-abi(ansic-%{ansic_major}) = %{ansic_minor} +Provides: xserver-abi(videodrv-%{videodrv_major}) = %{videodrv_minor} +Provides: xserver-abi(xinput-%{xinput_major}) = %{xinput_minor} +Provides: xserver-abi(extension-%{extension_major}) = %{extension_minor} +%endif +%if 0%{?gitdate} +Provides: xserver-abi(ansic-%{git_ansic_major}) = %{git_ansic_minor} +Provides: xserver-abi(videodrv-%{git_videodrv_major}) = %{git_videodrv_minor} +Provides: xserver-abi(xinput-%{git_xinput_major}) = %{git_xinput_minor} +Provides: xserver-abi(extension-%{git_extension_major}) = %{git_extension_minor} +%endif +Obsoletes: xorg-x11-glamor < %{version}-%{release} +Provides: xorg-x11-glamor = %{version}-%{release} +Obsoletes: xorg-x11-drv-modesetting < %{version}-%{release} +Provides: xorg-x11-drv-modesetting = %{version}-%{release} +# Dropped from F25 +Obsoletes: xorg-x11-drv-vmmouse < 13.1.0-4 + +Requires: xorg-x11-server-common >= %{version}-%{release} +Requires: system-setup-keyboard +Requires: xorg-x11-drv-libinput +%ifnarch s390 s390x +Requires: xorg-x11-drv-fbdev +%ifarch x86_64 +Requires: xorg-x11-drv-vesa +%endif +%endif +Requires: libEGL + +%description Xorg +X.org X11 is an open source implementation of the X Window System. It +provides the basic low level functionality which full fledged +graphical user interfaces (GUIs) such as GNOME and KDE are designed +upon. + + +%package Xnest +Summary: A nested server +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xnest + +%description Xnest +Xnest is an X server which has been implemented as an ordinary +X application. It runs in a window just like other X applications, +but it is an X server itself in which you can run other software. It +is a very useful tool for developers who wish to test their +applications without running them on their real X server. + + +%package Xdmx +Summary: Distributed Multihead X Server and utilities +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xdmx + +%description Xdmx +Xdmx is proxy X server that provides multi-head support for multiple displays +attached to different machines (each of which is running a typical X server). +When Xinerama is used with Xdmx, the multiple displays on multiple machines +are presented to the user as a single unified screen. A simple application +for Xdmx would be to provide multi-head support using two desktop machines, +each of which has a single display device attached to it. A complex +application for Xdmx would be to unify a 4 by 4 grid of 1280x1024 displays +(each attached to one of 16 computers) into a unified 5120x4096 display. + + +%package Xvfb +Summary: A X Windows System virtual framebuffer X server +Group: User Interface/X +# xvfb-run is GPLv2, rest is MIT +License: MIT and GPLv2 +Requires: xorg-x11-server-common >= %{version}-%{release} +# required for xvfb-run +Requires: xorg-x11-xauth +Provides: Xvfb + +%description Xvfb +Xvfb (X Virtual Frame Buffer) is an X server that is able to run on +machines with no display hardware and no physical input devices. +Xvfb simulates a dumb framebuffer using virtual memory. Xvfb does +not open any devices, but behaves otherwise as an X display. Xvfb +is normally used for testing servers. + + +%package Xephyr +Summary: A nested server +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xephyr + +%description Xephyr +Xephyr is an X server which has been implemented as an ordinary +X application. It runs in a window just like other X applications, +but it is an X server itself in which you can run other software. It +is a very useful tool for developers who wish to test their +applications without running them on their real X server. Unlike +Xnest, Xephyr renders to an X image rather than relaying the +X protocol, and therefore supports the newer X extensions like +Render and Composite. + + +%package devel +Summary: SDK for X server driver module development +Group: User Interface/X +Requires: xorg-x11-util-macros +Requires: xorg-x11-proto-devel +Requires: libXfont2-devel +Requires: pkgconfig pixman-devel libpciaccess-devel +Provides: xorg-x11-server-static +Obsoletes: xorg-x11-glamor-devel < %{version}-%{release} +Provides: xorg-x11-glamor-devel = %{version}-%{release} + +%description devel +The SDK package provides the developmental files which are necessary for +developing X server driver modules, and for compiling driver modules +outside of the standard X11 source code tree. Developers writing video +drivers, input drivers, or other X modules should install this package. + + +%package source +Summary: Xserver source code required to build VNC server (Xvnc) +Group: Development/Libraries +BuildArch: noarch + +%description source +Xserver source code needed to build VNC server (Xvnc) + + +%prep +%autosetup -N -n %{pkgname}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} +rm -rf .git +cp %{SOURCE1} .gitignore +# ick +%global __scm git +%{expand:%__scm_setup_git -q} +%autopatch + +%if 0%{?stable_abi} +# check the ABI in the source against what we expect. +getmajor() { + grep -i ^#define.ABI.$1_VERSION hw/xfree86/common/xf86Module.h | + tr '(),' ' ' | awk '{ print $4 }' +} + +getminor() { + grep -i ^#define.ABI.$1_VERSION hw/xfree86/common/xf86Module.h | + tr '(),' ' ' | awk '{ print $5 }' +} + +test `getmajor ansic` == %{ansic_major} +test `getminor ansic` == %{ansic_minor} +test `getmajor videodrv` == %{videodrv_major} +test `getminor videodrv` == %{videodrv_minor} +test `getmajor xinput` == %{xinput_major} +test `getminor xinput` == %{xinput_minor} +test `getmajor extension` == %{extension_major} +test `getminor extension` == %{extension_minor} + +%endif + +%build + +export CFLAGS="$RPM_OPT_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" +export CXXFLAGS="$RPM_OPT_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" +export LDFLAGS="$RPM_LD_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-ld" + +%ifnarch %{ix86} x86_64 +%global no_int10 --disable-vbe --disable-int10-module +%endif + +%global kdrive --enable-kdrive --enable-xephyr --disable-xfake --disable-xfbdev +%global xservers --enable-xvfb --enable-xnest %{kdrive} --enable-xorg +%global default_font_path "catalogue:/etc/X11/fontpath.d,built-ins" +%global dri_flags --enable-dri --enable-dri2 %{?!rhel:--enable-dri3} --enable-suid-wrapper --enable-glamor + +autoreconf -f -v --install || exit 1 + +%configure %{xservers} \ + --enable-dependency-tracking \ + --disable-static \ + --with-pic \ + %{?no_int10} --with-int10=x86emu \ + --with-default-font-path=%{default_font_path} \ + --with-module-dir=%{_libdir}/xorg/modules \ + --with-builderstring="Build ID: %{name} %{version}-%{release}" \ + --with-os-name="$(hostname -s) $(uname -r)" \ + --with-xkb-output=%{_localstatedir}/lib/xkb \ + --without-dtrace \ + --disable-linux-acpi --disable-linux-apm \ + --enable-xselinux --enable-record --enable-present \ + --enable-xcsecurity \ + --enable-config-udev \ + --disable-unit-tests \ + --enable-dmx \ + --disable-xwayland \ + %{dri_flags} %{?bodhi_flags} \ + ${CONFIGURE} + +make V=1 %{?_smp_mflags} + + +%install +%make_install + +mkdir -p $RPM_BUILD_ROOT%{_libdir}/xorg/modules/{drivers,input} + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d +install -m 644 %{SOURCE10} $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/xserver +# restore this if/when restoring the PAM patch +#mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/security/console.apps +#touch $RPM_BUILD_ROOT%{_sysconfdir}/security/console.apps/xserver + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d +install -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d + +# make sure the (empty) /etc/X11/xorg.conf.d is there, system-setup-keyboard +# relies on it more or less. +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/X11/xorg.conf.d + +%if %{stable_abi} +install -m 755 %{SOURCE30} $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +%else +sed -e s/@MAJOR@/%{gitdate}/g -e s/@MINOR@/%{minor_serial}/g %{SOURCE31} > \ + $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +chmod 755 $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +%endif + +install -m 0755 %{SOURCE20} $RPM_BUILD_ROOT%{_bindir}/xvfb-run + +# Make the source package +%global xserver_source_dir %{_datadir}/xorg-x11-server-source +%global inst_srcdir %{buildroot}/%{xserver_source_dir} + +mkdir -p %{inst_srcdir}/{Xext,xkb,GL,hw/{xquartz/bundle,xfree86/common}} +mkdir -p %{inst_srcdir}/{hw/dmx/doc,man,doc,hw/dmx/doxygen} +cp {,%{inst_srcdir}/}hw/xquartz/bundle/cpprules.in +cp {,%{inst_srcdir}/}man/Xserver.man +cp {,%{inst_srcdir}/}doc/smartsched +cp {,%{inst_srcdir}/}hw/dmx/doxygen/doxygen.conf.in +cp {,%{inst_srcdir}/}xserver.ent.in +cp {,%{inst_srcdir}/}hw/xfree86/Xorg.sh.in +cp xkb/README.compiled %{inst_srcdir}/xkb +cp hw/xfree86/xorgconf.cpp %{inst_srcdir}/hw/xfree86 + +find . -type f | egrep '.*\.(c|h|am|ac|inc|m4|h.in|pc.in|man.pre|pl|txt)$' | +xargs tar cf - | (cd %{inst_srcdir} && tar xf -) +find %{inst_srcdir}/hw/xfree86 -name \*.c -delete + +# Remove unwanted files/dirs +{ + find $RPM_BUILD_ROOT -type f -name '*.la' | xargs rm -f -- || : +%ifnarch %{ix86} x86_64 + rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/lib{int10,vbe}.so +%endif +} + + +%files common +%doc COPYING +%{_mandir}/man1/Xserver.1* +%{_libdir}/xorg/protocol.txt +%dir %{_localstatedir}/lib/xkb +%{_localstatedir}/lib/xkb/README.compiled + +%if 1 +%global Xorgperms %attr(4755, root, root) +%else +# disable until module loading is audited +%global Xorgperms %attr(0711,root,root) %caps(cap_sys_admin,cap_sys_rawio,cap_dac_override=pe) +%endif + +# restore the missingok one if/when restoring the PAM patch +%files Xorg +%config %attr(0644,root,root) %{_sysconfdir}/pam.d/xserver +#config(missingok) /etc/security/console.apps/xserver +%{_bindir}/X +%{_bindir}/Xorg +%{_libexecdir}/Xorg +%{Xorgperms} %{_libexecdir}/Xorg.wrap +%{_bindir}/cvt +%{_bindir}/gtf +%dir %{_libdir}/xorg +%dir %{_libdir}/xorg/modules +%dir %{_libdir}/xorg/modules/drivers +%{_libdir}/xorg/modules/drivers/modesetting_drv.so +%dir %{_libdir}/xorg/modules/extensions +%{_libdir}/xorg/modules/extensions/libglx.so +%dir %{_libdir}/xorg/modules/input +%{_libdir}/xorg/modules/libfbdevhw.so +%{_libdir}/xorg/modules/libexa.so +%{_libdir}/xorg/modules/libfb.so +%{_libdir}/xorg/modules/libglamoregl.so +%{_libdir}/xorg/modules/libshadow.so +%{_libdir}/xorg/modules/libshadowfb.so +%{_libdir}/xorg/modules/libvgahw.so +%{_libdir}/xorg/modules/libwfb.so +%ifarch %{ix86} x86_64 +%{_libdir}/xorg/modules/libint10.so +%{_libdir}/xorg/modules/libvbe.so +%endif +%{_mandir}/man1/gtf.1* +%{_mandir}/man1/Xorg.1* +%{_mandir}/man1/Xorg.wrap.1* +%{_mandir}/man1/cvt.1* +%{_mandir}/man4/fbdevhw.4* +%{_mandir}/man4/exa.4* +%{_mandir}/man4/modesetting.4* +%{_mandir}/man5/Xwrapper.config.5* +%{_mandir}/man5/xorg.conf.5* +%{_mandir}/man5/xorg.conf.d.5* +%dir %{_sysconfdir}/X11/xorg.conf.d +%dir %{_datadir}/X11/xorg.conf.d +%{_datadir}/X11/xorg.conf.d/10-quirks.conf + +%files Xnest +%{_bindir}/Xnest +%{_mandir}/man1/Xnest.1* + +%files Xdmx +%{_bindir}/Xdmx +%{_bindir}/dmxaddinput +%{_bindir}/dmxaddscreen +%{_bindir}/dmxreconfig +%{_bindir}/dmxresize +%{_bindir}/dmxrminput +%{_bindir}/dmxrmscreen +%{_bindir}/dmxtodmx +%{_bindir}/dmxwininfo +%{_bindir}/vdltodmx +%{_bindir}/dmxinfo +%{_bindir}/xdmxconfig +%{_mandir}/man1/Xdmx.1* +%{_mandir}/man1/dmxtodmx.1* +%{_mandir}/man1/vdltodmx.1* +%{_mandir}/man1/xdmxconfig.1* + +%files Xvfb +%{_bindir}/Xvfb +%{_bindir}/xvfb-run +%{_mandir}/man1/Xvfb.1* + +%files Xephyr +%{_bindir}/Xephyr +%{_mandir}/man1/Xephyr.1* + +%files devel +%doc COPYING +#{_docdir}/xorg-server +%{_bindir}/xserver-sdk-abi-requires +%{_libdir}/pkgconfig/xorg-server.pc +%dir %{_includedir}/xorg +%{_includedir}/xorg/*.h +%{_datadir}/aclocal/xorg-server.m4 + +%files source +%{xserver_source_dir} + + +%changelog +* Fri Jan 28 2022 Olivier Fourdan - 1.20.11-5 +- Fix crash with NVIDIA proprietary driver with Present (#2046329) + +* Thu Jan 6 2022 Olivier Fourdan - 1.20.11-4 +- CVE fix for: CVE-2021-4008 (#2030162), CVE-2021-4009 (#2030172), + CVE-2021-4010 (#2030175), CVE-2021-4011 (#2030181) + +* Mon Nov 29 2021 Jocelyn Falempe - 1.20.11-3 +- xf86/logind Fix drm_drop_master before vt_reldis + Resolves: #1771863 + +* Wed Jun 9 2021 Olivier Fourdan - 1.20.11-2 +- Remove Xwayland from the xserver builds + Resolves: #1956838 + +* Tue Jun 1 2021 Olivier Fourdan - 1.20.11-1 +- xserver 1.20.11 + Resolves: #1954260 + +* Thu Dec 10 2020 Adam Jackson - 1.20.10-1 +- xserver 1.20.10 + Resolves: #1891871 + +* Wed Dec 9 2020 Michel Dänzer - 1.20.8-10 +- modesetting: keep going if a modeset fails on EnterVT + Resolves: #1838392 + +* Mon Nov 16 2020 Adam Jackson - 1.20.8-9 +- CVE fix for: CVE-2020-14347 (#1862320) + +* Thu Oct 29 2020 Michel Dänzer - 1.20.8-8 +- CVE fixes for: CVE-2020-14345 (#1872391), CVE-2020-14346 (#1872395), + CVE-2020-14361 (#1872402), CVE-2020-14362 (#1872409) + +* Tue Oct 27 2020 Adam Jackson - 1.20.8-7 +- Enable XC-SECURITY + Resolves: #1863142 + +* Thu Aug 20 2020 Michel Dänzer - 1.20.8-6 +- xfree86: add drm modes on non-GTF panels + Resolves: #1823461 + +* Tue Aug 4 2020 Michel Dänzer - 1.20.8-5 +- xwayland: Hold a pixmap reference in struct xwl_present_event + Related: #1728684 +- glamor: Fix glamor_poly_fill_rect_gl xRectangle::width/height handling + Resolves: #1740250 + +* Fri Jul 10 2020 Ray Strode - 1.20.8-4 +- Don't switch VTs in the exit path, if killed on inactive VT + Related: #1618481 + +* Fri Jun 26 2020 Michel Dänzer - 1.20.8-3 +- Downgrade modesetting "glamor initialization failed" X_ERROR → X_INFO + Resolves: #1724573 +- Xwayland / Present leak fixes for #1728684 + +* Wed Jun 10 2020 Michel Dänzer - 1.20.8-2 +- Re-enable Xwayland Present support + Resolves: #1728684, #1715676 +- Remove unused patch + +* Tue May 26 2020 Adam Jackson - 1.20.8-1 +- xserver 1.20.8 + +* Tue Feb 11 2020 Michel Dänzer - 1.20.6-3 +- Add fix for crash with Option "Rotate" in xorg.conf + Resolves: #1795328 + +* Wed Dec 11 2019 Michel Dänzer - 1.20.6-2 +- Add fixes for intermittent modesetting artifacts + Resolves: #1738670 + +* Mon Dec 9 2019 Olivier Fourdan - 1.20.6-1 +- xserver 1.20.6 + +* Tue Sep 03 2019 Adam Jackson - 1.20.3-11 +- Add DRI2 fallback driver mappings for i965 and radeonsi + +* Mon Aug 19 2019 Adam Jackson - 1.20.3-10 +- Backport glvnd vendor selection for prime render offloading + +* Fri Jul 12 2019 Adam Jackson - 1.20.3-8 +- Fix platform device PCI detection for complex bus topologies + +* Wed Apr 10 2019 Adam Jackson - 1.20.3-7 +- Don't require fbdev on s390x, where it doesn't exist + +* Wed Apr 03 2019 Adam Jackson - 1.20.3-6 +- Add Requires: fbdev (and on x86_64, vesa) to Xorg subpackage + +* Mon Jan 14 2019 Ben Crocker - 1.20.3-5 +- Add Eric Anholt's patch e50c85f4ebf559 from upstream: +- Fix segfault on probing a non-PCI platform device on a system with PCI +- NOTE: also pertains on a system with no PCI, e.g. s390x. + Resolves: #1652013 + +* Mon Jan 07 2019 Olivier Fourdan - 1.20.3-4 +- Move LeaveVT after resetting randr pointers in xf86CrtcCloseScreen + +* Mon Nov 19 2018 Adam Jackson - 1.20.3-3 +- Apply even more -z now and -pie + +* Mon Nov 19 2018 Ray Strode - 1.20.3-2 +- Fix crash in Xephyr on server reset + Resolves: #1650168 + +* Tue Nov 13 2018 Adam Jackson - 1.20.3-1 +- xserver 1.20.3 +- Also forget about DRI driver names for drivers we're not shipping + +* Fri Oct 26 2018 Adam Jackson - 1.20.2-5 +- Work around broken fbdev headers + +* Mon Oct 22 2018 Adam Jackson - 1.20.2-4 +- Back out the PAM patch, may not be necessary in 8 + +* Wed Oct 17 2018 Peter Hutterer 1.20.2-3 +- Backport fix for readlink call from master + +* Tue Oct 16 2018 Adam Jackson - 1.20.2-2 +- Avoid drmSetInterfaceVersion in platform device probe +- Backport a misparenthesis fix from master + +* Mon Oct 15 2018 Adam Jackson - 1.20.2-1 +- xserver 1.20.2 + +* Mon Oct 15 2018 Olivier Fourdan > - 1.20.1-4 +- Some more RHEL mustard: + - Disable Present support in Xwayland (rhbz#1638463) + +* Fri Oct 12 2018 Adam Jackson - 1.20.1-3 +- Assorted RHEL mustard: + - Don't probe for drivers we're not shipping + - Enable PAM + - Link Xorg with -z now + - Nerf modesetting's atomic ioctl support + - Don't autoconfigure vesa or fbdev from X -configure + - Call LeaveVT on RANDR's CloseScreen path so we drop drm master + - Try harder to get initial spanning desktop if the output's + preferred mode was filtered away +- Sync va_gl/vdpau patch from F29 + +* Thu Sep 13 2018 Dave Airlie - 1.20.1-2 +- build with PIE flags + +* Thu Aug 09 2018 Adam Jackson - 1.20.1-1 +- xserver 1.20.1 + +* Sat Jul 14 2018 Fedora Release Engineering - 1.20.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 12 2018 Adam Jackson - 1.20.0-4 +- Xorg and Xwayland Requires: libEGL + +* Fri Jun 01 2018 Adam Williamson - 1.20.0-3 +- Backport fixes for RHBZ#1579067 + +* Wed May 16 2018 Adam Jackson - 1.20.0-2 +- Xorg Requires: xorg-x11-drv-libinput + +* Thu May 10 2018 Adam Jackson - 1.20.0-1 +- xserver 1.20 + +* Wed Apr 25 2018 Adam Jackson - 1.19.99.905-2 +- Fix xvfb-run's default depth to be 24 + +* Tue Apr 24 2018 Adam Jackson - 1.19.99.905-1 +- xserver 1.20 RC5 + +* Thu Apr 12 2018 Olivier Fourdan - 1.19.99.904-2 +- Re-fix "use type instead of which in xvfb-run (rhbz#1443357)" which + was overridden inadvertently + +* Tue Apr 10 2018 Adam Jackson - 1.19.99.904-1 +- xserver 1.20 RC4 + +* Mon Apr 02 2018 Adam Jackson - 1.19.99.903-1 +- xserver 1.20 RC3 + +* Tue Feb 13 2018 Olivier Fourdan 1.19.6-5 +- xwayland: avoid race condition on new keymap +- xwayland: Keep separate variables for pointer and tablet foci (rhbz#1519961) +- xvfb-run now support command line option “--auto-display” + +* Fri Feb 09 2018 Fedora Release Engineering - 1.19.6-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 30 2018 Olivier Fourdan 1.19.6-3 +- Avoid generating a core file when the Wayland compositor is gone. + +* Thu Jan 11 2018 Peter Hutterer 1.19.6-2 +- Fix handling of devices with ID_INPUT=null + +* Wed Dec 20 2017 Adam Jackson - 1.19.6-1 +- xserver 1.19.6 + +* Thu Oct 12 2017 Adam Jackson - 1.19.5-1 +- xserver 1.19.5 + +* Thu Oct 05 2017 Olivier Fourdan - 1.19.4-1 +- xserver-1.19.4 +- Backport tablet support for Xwayland + +* Fri Sep 08 2017 Troy Dawson - 1.19.3-9 +- Cleanup spec file conditionals + +* Thu Aug 03 2017 Fedora Release Engineering - 1.19.3-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 1.19.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sun Jul 2 2017 Ville Skyttä - 1.19.3-6 +- Use type instead of which in xvfb-run (rhbz#1443357) + +* Thu May 04 2017 Orion Poplawski - 1.19.3-5 +- Enable full build for s390/x + +* Mon Apr 24 2017 Ben Skeggs - 1.19.3-4 +- Default to xf86-video-modesetting on GeForce 8 and newer + +* Fri Apr 07 2017 Adam Jackson - 1.19.3-3 +- Inoculate against a versioning bug with libdrm 2.4.78 + +* Thu Mar 23 2017 Hans de Goede - 1.19.3-2 +- Use va_gl as vdpau driver on i965 GPUs (rhbz#1413733) + +* Wed Mar 15 2017 Adam Jackson - 1.19.3-1 +- xserver 1.19.3 + +* Thu Mar 02 2017 Adam Jackson - 1.19.2-1 +- xserver 1.19.2 + +* Sat Feb 11 2017 Fedora Release Engineering - 1.19.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Feb 01 2017 Peter Hutterer 1.19.1-3 +- Fix a few input thread lock issues causing intel crashes (#1384486) + +* Mon Jan 16 2017 Adam Jackson - 1.19.1-2 +- Limit the intel driver only on F26 and up + +* Wed Jan 11 2017 Adam Jackson - 1.19.1-1 +- xserver 1.19.1 + +* Tue Jan 10 2017 Hans de Goede - 1.19.0-4 +- Follow Debian and only default to the intel ddx on gen4 or older intel GPUs + +* Tue Dec 20 2016 Hans de Goede - 1.19.0-3 +- Add one more patch for better integration with the nvidia binary driver + +* Thu Dec 15 2016 Hans de Goede - 1.19.0-2 +- Add some patches for better integration with the nvidia binary driver +- Add a patch from upstream fixing a crash (rhbz#1389886) + +* Wed Nov 23 2016 Olivier Fourdan 1.19.0-1 +- xserver 1.19.0 +- Fix use after free of cursors in Xwayland (rhbz#1385258) +- Fix an issue where some monitors would show only black, or + partially black when secondary GPU outputs are used + +* Tue Nov 15 2016 Peter Hutterer 1.19.0-0.8.rc2 +- Update device barriers for new master devices (#1384432) + +* Thu Nov 3 2016 Hans de Goede - 1.19.0-0.7.rc2 +- Update to 1.19.0-rc2 +- Fix (hopefully) various crashes in FlushAllOutput() (rhbz#1382444) +- Fix Xwayland crashing in glamor on non glamor capable hw (rhbz#1390018) + +* Tue Nov 1 2016 Ben Crocker - 1.19.0-0.6.20161028 +- Fix Config record allocation during startup: if xorg.conf.d directory +- was absent, a segfault resulted. + +* Mon Oct 31 2016 Adam Jackson - 1.19.0-0.5.20161026 +- Use %%autopatch instead of doing our own custom git-am trick + +* Fri Oct 28 2016 Hans de Goede - 1.19.0-0.4.20161026 +- Add missing Requires: libXfont2-devel to -devel sub-package (rhbz#1389711) + +* Wed Oct 26 2016 Hans de Goede - 1.19.0-0.3.20161026 +- Sync with upstream git, bringing in a bunch if bug-fixes +- Add some extra fixes which are pending upstream +- This also adds PointerWarping emulation to Xwayland, which should improve + compatiblity with many games diff --git a/xserver-sdk-abi-requires.git b/xserver-sdk-abi-requires.git new file mode 100755 index 0000000..c033061 --- /dev/null +++ b/xserver-sdk-abi-requires.git @@ -0,0 +1,14 @@ +#!/bin/sh +# +# The X server provides capabilities of the form: +# +# Provides: xserver-abi(ansic-0) = 4 +# +# for an ABI version of 0.4. The major number is encoded into the name so +# that major number changes force upgrades. If we didn't, then +# +# Requires: xserver-abi(ansic) >= 0.4 +# +# would also match 1.0, which is wrong since major numbers mean an ABI break. + +echo "xserver-abi($1-@MAJOR@) >= @MINOR@" diff --git a/xserver-sdk-abi-requires.release b/xserver-sdk-abi-requires.release new file mode 100755 index 0000000..30d77bf --- /dev/null +++ b/xserver-sdk-abi-requires.release @@ -0,0 +1,19 @@ +#!/bin/sh +# +# The X server provides capabilities of the form: +# +# Provides: xserver-abi(ansic-0) = 4 +# +# for an ABI version of 0.4. The major number is encoded into the name so +# that major number changes force upgrades. If we didn't, then +# +# Requires: xserver-abi(ansic) >= 0.4 +# +# would also match 1.0, which is wrong since major numbers mean an ABI break. + +ver=$(pkg-config --variable abi_$1 xorg-server) + +major=$(echo $ver | cut -f 1 -d .) +minor=$(echo $ver | cut -f 2 -d .) + +echo "xserver-abi($1-$major) >= $minor" diff --git a/xserver.pamd b/xserver.pamd new file mode 100644 index 0000000..bf79930 --- /dev/null +++ b/xserver.pamd @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_console.so +account required pam_permit.so +session optional pam_keyinit.so force revoke diff --git a/xvfb-run.sh b/xvfb-run.sh new file mode 100644 index 0000000..9d088c1 --- /dev/null +++ b/xvfb-run.sh @@ -0,0 +1,200 @@ +#!/bin/sh +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x24" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <&2 + exit 2 +fi + +if ! type xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 1 $XVFBARGS $LISTENTCP \ + 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: