summaryrefslogtreecommitdiffstats
path: root/source/x/x11/patch/xorg-server
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2022-08-08 23:29:31 +0000
committer Eric Hameleers <alien@slackware.com>2022-08-09 07:00:15 +0200
commit2d7cee39612aff5630994ad4634733902c6f78db (patch)
treea2f87b530a6de9398ddedeffa31bff40d19615cf /source/x/x11/patch/xorg-server
parent581afe42faa86fbb4014e48913cc5183aee69203 (diff)
downloadcurrent-2d7cee39612aff5630994ad4634733902c6f78db.tar.gz
current-2d7cee39612aff5630994ad4634733902c6f78db.tar.xz
Mon Aug 8 23:29:31 UTC 202220220808232931
Hey folks, here's that graphics stack upgrade that you've been waiting for! After looking at what drivers are currently shipped by other projects, I took an axe to the driver list. Some of the removed drivers will still compile even though they are abandoned, and some of the others are still getting git commits (which allows *some* of them to compile). The removed stuff mostly looks obsolete to me (we really can't support ancient hardware forever). But if you think I've gone too far with any of these removals, please make or contribute to a thread about it on LQ and I'll take any comments there into consideration. a/kernel-firmware-20220808_e6857b6-noarch-1.txz: Upgraded. ap/vim-9.0.0174-x86_64-1.txz: Upgraded. l/gnu-efi-3.0.15-x86_64-1.txz: Upgraded. n/libtirpc-1.3.3-x86_64-1.txz: Upgraded. n/mutt-2.2.7-x86_64-1.txz: Upgraded. x/egl-wayland-1.1.10-x86_64-1.txz: Upgraded. x/libdrm-2.4.112-x86_64-1.txz: Upgraded. x/libglvnd-1.4.0-x86_64-1.txz: Upgraded. x/mesa-22.1.5-x86_64-1.txz: Upgraded. Includes Mesa amber 21.3.9 DRI drivers, and mesa-demos-8.5.0. Thanks to LuckyCyborg for posting some valuable hints on LQ. x/xcb-proto-1.15.2-x86_64-1.txz: Upgraded. x/xf86-input-acecad-1.5.0-x86_64-14.txz: Removed. x/xf86-input-evdev-2.10.6-x86_64-4.txz: Rebuilt. x/xf86-input-joystick-1.6.3-x86_64-5.txz: Removed. x/xf86-input-keyboard-1.9.0-x86_64-5.txz: Removed. x/xf86-input-libinput-1.2.1-x86_64-2.txz: Rebuilt. x/xf86-input-mouse-1.9.3-x86_64-3.txz: Removed. x/xf86-input-penmount-1.5.0-x86_64-14.txz: Removed. x/xf86-input-synaptics-1.9.2-x86_64-1.txz: Upgraded. x/xf86-input-vmmouse-13.1.0-x86_64-9.txz: Removed. x/xf86-input-void-1.4.1-x86_64-3.txz: Removed. x/xf86-input-wacom-1.0.0-x86_64-2.txz: Rebuilt. x/xf86-video-amdgpu-22.0.0-x86_64-2.txz: Rebuilt. x/xf86-video-apm-1.3.0-x86_64-3.txz: Removed. x/xf86-video-ark-0.7.5-x86_64-13.txz: Removed. x/xf86-video-ast-1.1.5-x86_64-7.txz: Removed. x/xf86-video-ati-20220730_7a6a34af-x86_64-1.txz: Upgraded. x/xf86-video-chips-1.4.0-x86_64-3.txz: Removed. x/xf86-video-cirrus-1.5.3-x86_64-7.txz: Removed. x/xf86-video-dummy-0.4.0-x86_64-2.txz: Rebuilt. x/xf86-video-glint-1.2.9-x86_64-5.txz: Removed. x/xf86-video-i128-1.4.0-x86_64-3.txz: Removed. x/xf86-video-i740-1.4.0-x86_64-3.txz: Removed. x/xf86-video-intel-20210115_31486f40-x86_64-1.txz: Upgraded. x/xf86-video-mach64-6.9.6-x86_64-3.txz: Removed. x/xf86-video-mga-2.0.0-x86_64-3.txz: Removed. x/xf86-video-neomagic-1.3.0-x86_64-3.txz: Removed. x/xf86-video-nouveau-20220125_29cc528-x86_64-1.txz: Upgraded. x/xf86-video-nv-2.1.21-x86_64-5.txz: Removed. x/xf86-video-openchrome-0.6.0-x86_64-6.txz: Rebuilt. x/xf86-video-r128-6.12.0-x86_64-3.txz: Removed. x/xf86-video-rendition-4.2.7-x86_64-3.txz: Removed. x/xf86-video-s3-0.7.0-x86_64-3.txz: Removed. x/xf86-video-s3virge-1.11.0-x86_64-3.txz: Removed. x/xf86-video-savage-20190128_8579718-x86_64-3.txz: Removed. x/xf86-video-siliconmotion-1.7.9-x86_64-5.txz: Removed. x/xf86-video-sis-0.12.0-x86_64-3.txz: Removed. x/xf86-video-sisusb-0.9.7-x86_64-5.txz: Removed. x/xf86-video-tdfx-1.5.0-x86_64-3.txz: Removed. x/xf86-video-tga-1.2.2-x86_64-13.txz: Removed. x/xf86-video-trident-1.3.8-x86_64-5.txz: Removed. x/xf86-video-tseng-1.2.5-x86_64-13.txz: Removed. x/xf86-video-v4l-0.3.0-x86_64-3.txz: Removed. x/xf86-video-vboxvideo-1.0.0-x86_64-5.txz: Removed. x/xf86-video-vesa-2.5.0-x86_64-4.txz: Rebuilt. x/xf86-video-vmware-20220621_ff5637a-x86_64-1.txz: Upgraded. x/xf86-video-voodoo-1.2.5-x86_64-14.txz: Removed. x/xorg-server-21.1.4-x86_64-1.txz: Upgraded. x/xorg-server-xephyr-21.1.4-x86_64-1.txz: Upgraded. x/xorg-server-xnest-21.1.4-x86_64-1.txz: Upgraded. x/xorg-server-xvfb-21.1.4-x86_64-1.txz: Upgraded. x/xorg-server-xwayland-22.1.3-x86_64-1.txz: Upgraded. x/xorgproto-2022.1-x86_64-1.txz: Upgraded. xap/geeqie-2.0-x86_64-1.txz: Upgraded. xap/mozilla-firefox-103.0.2-x86_64-1.txz: Upgraded. This is a bugfix release. For more information, see: https://www.mozilla.org/en-US/firefox/103.0.2/releasenotes/ xap/vim-gvim-9.0.0174-x86_64-1.txz: Upgraded. extra/xf86-video-fbdev/xf86-video-fbdev-0.5.0-x86_64-2.txz: Rebuilt.
Diffstat (limited to 'source/x/x11/patch/xorg-server')
-rw-r--r--source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch293
-rw-r--r--source/x/x11/patch/xorg-server/0001-f1070c01d616c5f21f939d5ebc533738779451ac.patch75
-rw-r--r--source/x/x11/patch/xorg-server/0001-render-Fix-build-with-gcc-12.patch90
-rw-r--r--source/x/x11/patch/xorg-server/0002-dd8caf39e9e15d8f302e54045dd08d8ebf1025dc.patch178
-rw-r--r--source/x/x11/patch/xorg-server/0003-6907b6ea2b4ce949cb07271f5b678d5966d9df42.patch181
-rw-r--r--source/x/x11/patch/xorg-server/failed/0001-Always-install-vbe-and-int10-sdk-headers.patch (renamed from source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch)0
-rw-r--r--source/x/x11/patch/xorg-server/fix-pci-segfault.diff12
7 files changed, 0 insertions, 829 deletions
diff --git a/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch b/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch
deleted file mode 100644
index 86b96a23e..000000000
--- a/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch
+++ /dev/null
@@ -1,293 +0,0 @@
-From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001
-From: Dave Airlie <airlied@redhat.com>
-Date: Mon, 2 Apr 2018 16:49:02 -0400
-Subject: [PATCH] autobind GPUs to the screen
-
-This is a modified version of a patch we've been carry-ing in Fedora and
-RHEL for years now. This patch automatically adds secondary GPUs to the
-master as output sink / offload source making e.g. the use of
-slave-outputs just work, with requiring the user to manually run
-"xrandr --setprovideroutputsource" before he can hookup an external
-monitor to his hybrid graphics laptop.
-
-There is one problem with this patch, which is why it was not upstreamed
-before. What to do when a secondary GPU gets detected really is a policy
-decission (e.g. one may want to autobind PCI GPUs but not USB ones) and
-as such should be under control of the Desktop Environment.
-
-Unconditionally adding autobinding support to the xserver will result
-in races between the DE dealing with the hotplug of a secondary GPU
-and the server itself dealing with it.
-
-However we've waited for years for any Desktop Environments to actually
-start doing some sort of autoconfiguration of secondary GPUs and there
-is still not a single DE dealing with this, so I believe that it is
-time to upstream this now.
-
-To avoid potential future problems if any DEs get support for doing
-secondary GPU configuration themselves, the new autobind functionality
-is made optional. Since no DEs currently support doing this themselves it
-is enabled by default. When DEs grow support for doing this themselves
-they can disable the servers autobinding through the servers cmdline or a
-xorg.conf snippet.
-
-Signed-off-by: Dave Airlie <airlied@gmail.com>
-[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream]
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++
- hw/xfree86/common/xf86Globals.c | 2 ++
- hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++
- hw/xfree86/common/xf86Priv.h | 1 +
- hw/xfree86/common/xf86Privstr.h | 1 +
- hw/xfree86/common/xf86platformBus.c | 4 ++++
- hw/xfree86/man/Xorg.man | 7 +++++++
- hw/xfree86/man/xorg.conf.man | 6 ++++++
- randr/randrstr.h | 3 +++
- randr/rrprovider.c | 22 ++++++++++++++++++++++
- 10 files changed, 85 insertions(+)
-
-diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
-index 2c1d335..d7d7c2e 100644
---- a/hw/xfree86/common/xf86Config.c
-+++ b/hw/xfree86/common/xf86Config.c
-@@ -643,6 +643,7 @@ typedef enum {
- FLAG_DRI2,
- FLAG_USE_SIGIO,
- FLAG_AUTO_ADD_GPU,
-+ FLAG_AUTO_BIND_GPU,
- FLAG_MAX_CLIENTS,
- FLAG_IGLX,
- FLAG_DEBUG,
-@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = {
- {0}, FALSE},
- {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN,
- {0}, FALSE},
-+ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN,
-+ {0}, FALSE},
- {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER,
- {0}, FALSE },
- {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN,
-@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
- }
- xf86Msg(from, "%sutomatically adding GPU devices\n",
- xf86Info.autoAddGPU ? "A" : "Not a");
-+
-+ if (xf86AutoBindGPUDisabled) {
-+ xf86Info.autoBindGPU = FALSE;
-+ from = X_CMDLINE;
-+ }
-+ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) {
-+ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU,
-+ &xf86Info.autoBindGPU);
-+ from = X_CONFIG;
-+ }
-+ else {
-+ from = X_DEFAULT;
-+ }
-+ xf86Msg(from, "%sutomatically binding GPU devices\n",
-+ xf86Info.autoBindGPU ? "A" : "Not a");
-+
- /*
- * Set things up based on the config file information. Some of these
- * settings may be overridden later when the command line options are
-diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
-index e890f05..7b27b4c 100644
---- a/hw/xfree86/common/xf86Globals.c
-+++ b/hw/xfree86/common/xf86Globals.c
-@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = {
- #else
- .autoAddGPU = FALSE,
- #endif
-+ .autoBindGPU = TRUE,
- };
-
- const char *xf86ConfigFile = NULL;
-@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE;
- Gamma xf86Gamma = { 0.0, 0.0, 0.0 };
-
- Bool xf86AllowMouseOpenFail = FALSE;
-+Bool xf86AutoBindGPUDisabled = FALSE;
-
- #ifdef XF86VIDMODE
- Bool xf86VidModeDisabled = FALSE;
-diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
-index ea42ec9..ec255b6 100644
---- a/hw/xfree86/common/xf86Init.c
-+++ b/hw/xfree86/common/xf86Init.c
-@@ -76,6 +76,7 @@
- #include "xf86DDC.h"
- #include "xf86Xinput.h"
- #include "xf86InPriv.h"
-+#include "xf86Crtc.h"
- #include "picturestr.h"
- #include "randrstr.h"
- #include "glxvndabi.h"
-@@ -237,6 +238,19 @@ xf86PrivsElevated(void)
- return PrivsElevated();
- }
-
-+static void
-+xf86AutoConfigOutputDevices(void)
-+{
-+ int i;
-+
-+ if (!xf86Info.autoBindGPU)
-+ return;
-+
-+ for (i = 0; i < xf86NumGPUScreens; i++)
-+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
-+ xf86ScrnToScreen(xf86Screens[0]));
-+}
-+
- static void
- TrapSignals(void)
- {
-@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
- for (i = 0; i < xf86NumGPUScreens; i++)
- AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
-
-+ xf86AutoConfigOutputDevices();
-+
- xf86VGAarbiterWrapFunctions();
- if (sigio_blocked)
- input_unlock();
-@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i)
- xf86Info.iglxFrom = X_CMDLINE;
- return 0;
- }
-+ if (!strcmp(argv[i], "-noautoBindGPU")) {
-+ xf86AutoBindGPUDisabled = TRUE;
-+ return 1;
-+ }
-
- /* OS-specific processing */
- return xf86ProcessArgument(argc, argv, i);
-diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
-index 4fe2b5f..6566622 100644
---- a/hw/xfree86/common/xf86Priv.h
-+++ b/hw/xfree86/common/xf86Priv.h
-@@ -46,6 +46,7 @@
- extern _X_EXPORT const char *xf86ConfigFile;
- extern _X_EXPORT const char *xf86ConfigDir;
- extern _X_EXPORT Bool xf86AllowMouseOpenFail;
-+extern _X_EXPORT Bool xf86AutoBindGPUDisabled;
-
- #ifdef XF86VIDMODE
- extern _X_EXPORT Bool xf86VidModeDisabled;
-diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
-index 21c2e1f..6c71863 100644
---- a/hw/xfree86/common/xf86Privstr.h
-+++ b/hw/xfree86/common/xf86Privstr.h
-@@ -98,6 +98,7 @@ typedef struct {
-
- Bool autoAddGPU;
- const char *debug;
-+ Bool autoBindGPU;
- } xf86InfoRec, *xf86InfoPtr;
-
- /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */
-diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
-index cef47da..913a324 100644
---- a/hw/xfree86/common/xf86platformBus.c
-+++ b/hw/xfree86/common/xf86platformBus.c
-@@ -49,6 +49,7 @@
- #include "Pci.h"
- #include "xf86platformBus.h"
- #include "xf86Config.h"
-+#include "xf86Crtc.h"
-
- #include "randrstr.h"
- int platformSlotClaimed;
-@@ -665,6 +666,9 @@ xf86platformAddDevice(int index)
- }
- /* attach unbound to 0 protocol screen */
- AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
-+ if (xf86Info.autoBindGPU)
-+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
-+ xf86ScrnToScreen(xf86Screens[0]));
-
- RRResourcesChanged(xf86Screens[0]->pScreen);
- RRTellChanged(xf86Screens[0]->pScreen);
-diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man
-index 13a9dc3..745f986 100644
---- a/hw/xfree86/man/Xorg.man
-+++ b/hw/xfree86/man/Xorg.man
-@@ -283,6 +283,13 @@ is a comma separated list of directories to search for
- server modules. This option is only available when the server is run
- as root (i.e, with real-uid 0).
- .TP 8
-+.B \-noautoBindGPU
-+Disable automatically setting secondary GPUs up as output sinks and offload
-+sources. This is equivalent to setting the
-+.B AutoBindGPU
-+xorg.conf(__filemansuffix__) file option. To
-+.B false.
-+.TP 8
- .B \-nosilk
- Disable Silken Mouse support.
- .TP 8
-diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
-index 9589262..8d51e06 100644
---- a/hw/xfree86/man/xorg.conf.man
-+++ b/hw/xfree86/man/xorg.conf.man
-@@ -672,6 +672,12 @@ Enabled by default.
- If this option is disabled, then no GPU devices will be added from the udev
- backend. Enabled by default. (May need to be disabled to setup Xinerama).
- .TP 7
-+.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q
-+If enabled then secondary GPUs will be automatically set up as output-sinks and
-+offload-sources. Making e.g. laptop outputs connected only to the secondary
-+GPU directly available for use without needing to run
-+"xrandr --setprovideroutputsource". Enabled by default.
-+.TP 7
- .BI "Option \*qLog\*q \*q" string \*q
- This option controls whether the log is flushed and/or synced to disk after
- each message.
-diff --git a/randr/randrstr.h b/randr/randrstr.h
-index f94174b..092d726 100644
---- a/randr/randrstr.h
-+++ b/randr/randrstr.h
-@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p);
- extern _X_EXPORT void
- RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
-
-+extern _X_EXPORT void
-+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen);
-+
- /* rrproviderproperty.c */
-
- extern _X_EXPORT void
-diff --git a/randr/rrprovider.c b/randr/rrprovider.c
-index e4bc2bf..e04c18f 100644
---- a/randr/rrprovider.c
-+++ b/randr/rrprovider.c
-@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
-
- WriteEventsToClient(client, 1, (xEvent *) &pe);
- }
-+
-+void
-+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen)
-+{
-+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
-+ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen);
-+ RRProviderPtr provider = pScrPriv->provider;
-+ RRProviderPtr master_provider = masterPriv->provider;
-+
-+ if (!provider || !master_provider)
-+ return;
-+
-+ if ((provider->capabilities & RR_Capability_SinkOutput) &&
-+ (master_provider->capabilities & RR_Capability_SourceOutput)) {
-+ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider);
-+ RRInitPrimeSyncProps(pScreen);
-+ }
-+
-+ if ((provider->capabilities & RR_Capability_SourceOffload) &&
-+ (master_provider->capabilities & RR_Capability_SinkOffload))
-+ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider);
-+}
---
-2.16.2
-
diff --git a/source/x/x11/patch/xorg-server/0001-f1070c01d616c5f21f939d5ebc533738779451ac.patch b/source/x/x11/patch/xorg-server/0001-f1070c01d616c5f21f939d5ebc533738779451ac.patch
deleted file mode 100644
index 0efddcf56..000000000
--- a/source/x/x11/patch/xorg-server/0001-f1070c01d616c5f21f939d5ebc533738779451ac.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From f1070c01d616c5f21f939d5ebc533738779451ac Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Tue, 5 Jul 2022 12:40:47 +1000
-Subject: [PATCH] xkb: switch to array index loops to moving pointers
-
-Most similar loops here use a pointer that advances with each loop
-iteration, let's do the same here for consistency.
-
-No functional changes.
-
-Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
----
- xkb/xkb.c | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/xkb/xkb.c b/xkb/xkb.c
-index a29262c24..64e52611e 100644
---- a/xkb/xkb.c
-+++ b/xkb/xkb.c
-@@ -5368,16 +5368,16 @@ _CheckSetSections(XkbGeometryPtr geom,
- row->left = rWire->left;
- row->vertical = rWire->vertical;
- kWire = (xkbKeyWireDesc *) &rWire[1];
-- for (k = 0; k < rWire->nKeys; k++) {
-+ for (k = 0; k < rWire->nKeys; k++, kWire++) {
- XkbKeyPtr key;
-
- key = XkbAddGeomKey(row);
- if (!key)
- return BadAlloc;
-- memcpy(key->name.name, kWire[k].name, XkbKeyNameLength);
-- key->gap = kWire[k].gap;
-- key->shape_ndx = kWire[k].shapeNdx;
-- key->color_ndx = kWire[k].colorNdx;
-+ memcpy(key->name.name, kWire->name, XkbKeyNameLength);
-+ key->gap = kWire->gap;
-+ key->shape_ndx = kWire->shapeNdx;
-+ key->color_ndx = kWire->colorNdx;
- if (key->shape_ndx >= geom->num_shapes) {
- client->errorValue = _XkbErrCode3(0x10, key->shape_ndx,
- geom->num_shapes);
-@@ -5389,7 +5389,7 @@ _CheckSetSections(XkbGeometryPtr geom,
- return BadMatch;
- }
- }
-- rWire = (xkbRowWireDesc *) &kWire[rWire->nKeys];
-+ rWire = (xkbRowWireDesc *)kWire;
- }
- wire = (char *) rWire;
- if (sWire->nDoodads > 0) {
-@@ -5454,16 +5454,16 @@ _CheckSetShapes(XkbGeometryPtr geom,
- return BadAlloc;
- ol->corner_radius = olWire->cornerRadius;
- ptWire = (xkbPointWireDesc *) &olWire[1];
-- for (p = 0, pt = ol->points; p < olWire->nPoints; p++, pt++) {
-- pt->x = ptWire[p].x;
-- pt->y = ptWire[p].y;
-+ for (p = 0, pt = ol->points; p < olWire->nPoints; p++, pt++, ptWire++) {
-+ pt->x = ptWire->x;
-+ pt->y = ptWire->y;
- if (client->swapped) {
- swaps(&pt->x);
- swaps(&pt->y);
- }
- }
- ol->num_points = olWire->nPoints;
-- olWire = (xkbOutlineWireDesc *) (&ptWire[olWire->nPoints]);
-+ olWire = (xkbOutlineWireDesc *)ptWire;
- }
- if (shapeWire->primaryNdx != XkbNoShape)
- shape->primary = &shape->outlines[shapeWire->primaryNdx];
---
-GitLab
-
diff --git a/source/x/x11/patch/xorg-server/0001-render-Fix-build-with-gcc-12.patch b/source/x/x11/patch/xorg-server/0001-render-Fix-build-with-gcc-12.patch
deleted file mode 100644
index 22f2e5a72..000000000
--- a/source/x/x11/patch/xorg-server/0001-render-Fix-build-with-gcc-12.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 53173fdab492f0f638f6616fcf01af0b9ea6338d Mon Sep 17 00:00:00 2001
-From: Olivier Fourdan <ofourdan@redhat.com>
-Date: Thu, 20 Jan 2022 10:20:38 +0100
-Subject: [PATCH xserver] render: Fix build with gcc 12
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The xserver fails to compile with the latest gcc 12:
-
- render/picture.c: In function ‘CreateSolidPicture’:
- render/picture.c:874:26: error: array subscript ‘union _SourcePict[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Werror=array-bounds]
- 874 | pPicture->pSourcePict->type = SourcePictTypeSolidFill;
- | ^~
- render/picture.c:868:45: note: object of size 16 allocated by ‘malloc’
- 868 | pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictSolidFill));
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- render/picture.c: In function ‘CreateLinearGradientPicture’:
- render/picture.c:906:26: error: array subscript ‘union _SourcePict[0]’ is partly outside array bounds of ‘unsigned char[32]’ [-Werror=array-bounds]
- 906 | pPicture->pSourcePict->linear.type = SourcePictTypeLinear;
- | ^~
- render/picture.c:899:45: note: object of size 32 allocated by ‘malloc’
- 899 | pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictLinearGradient));
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- render/picture.c: In function ‘CreateConicalGradientPicture’:
- render/picture.c:989:26: error: array subscript ‘union _SourcePict[0]’ is partly outside array bounds of ‘unsigned char[32]’ [-Werror=array-bounds]
- 989 | pPicture->pSourcePict->conical.type = SourcePictTypeConical;
- | ^~
- render/picture.c:982:45: note: object of size 32 allocated by ‘malloc’
- 982 | pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictConicalGradient));
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- cc1: some warnings being treated as errors
- ninja: build stopped: subcommand failed.
-
-This is because gcc 12 has become stricter and raises a warning now.
-
-Fix the warning/error by allocating enough memory to store the union
-struct.
-
-Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
-Acked-by: Michel Dänzer <mdaenzer@redhat.com>
-Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1256
-(cherry picked from commit c6b0dcb82d4db07a2f32c09a8c09c85a5f57248e)
----
- render/picture.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/render/picture.c b/render/picture.c
-index afa0d258f..2be4b1954 100644
---- a/render/picture.c
-+++ b/render/picture.c
-@@ -865,7 +865,7 @@ CreateSolidPicture(Picture pid, xRenderColor * color, int *error)
- }
-
- pPicture->id = pid;
-- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictSolidFill));
-+ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict));
- if (!pPicture->pSourcePict) {
- *error = BadAlloc;
- free(pPicture);
-@@ -896,7 +896,7 @@ CreateLinearGradientPicture(Picture pid, xPointFixed * p1, xPointFixed * p2,
- }
-
- pPicture->id = pid;
-- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictLinearGradient));
-+ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict));
- if (!pPicture->pSourcePict) {
- *error = BadAlloc;
- free(pPicture);
-@@ -936,7 +936,7 @@ CreateRadialGradientPicture(Picture pid, xPointFixed * inner,
- }
-
- pPicture->id = pid;
-- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictRadialGradient));
-+ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict));
- if (!pPicture->pSourcePict) {
- *error = BadAlloc;
- free(pPicture);
-@@ -979,7 +979,7 @@ CreateConicalGradientPicture(Picture pid, xPointFixed * center, xFixed angle,
- }
-
- pPicture->id = pid;
-- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictConicalGradient));
-+ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict));
- if (!pPicture->pSourcePict) {
- *error = BadAlloc;
- free(pPicture);
---
-2.34.1
-
diff --git a/source/x/x11/patch/xorg-server/0002-dd8caf39e9e15d8f302e54045dd08d8ebf1025dc.patch b/source/x/x11/patch/xorg-server/0002-dd8caf39e9e15d8f302e54045dd08d8ebf1025dc.patch
deleted file mode 100644
index 72d30f36b..000000000
--- a/source/x/x11/patch/xorg-server/0002-dd8caf39e9e15d8f302e54045dd08d8ebf1025dc.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From dd8caf39e9e15d8f302e54045dd08d8ebf1025dc Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Tue, 5 Jul 2022 09:50:41 +1000
-Subject: [PATCH] xkb: swap XkbSetDeviceInfo and XkbSetDeviceInfoCheck
-
-XKB often uses a FooCheck and Foo function pair, the former is supposed
-to check all values in the request and error out on BadLength,
-BadValue, etc. The latter is then called once we're confident the values
-are good (they may still fail on an individual device, but that's a
-different topic).
-
-In the case of XkbSetDeviceInfo, those functions were incorrectly
-named, with XkbSetDeviceInfo ending up as the checker function and
-XkbSetDeviceInfoCheck as the setter function. As a result, the setter
-function was called before the checker function, accessing request
-data and modifying device state before we ensured that the data is
-valid.
-
-In particular, the setter function relied on values being already
-byte-swapped. This in turn could lead to potential OOB memory access.
-
-Fix this by correctly naming the functions and moving the length checks
-over to the checker function. These were added in 87c64fc5b0 to the
-wrong function, probably due to the incorrect naming.
-
-Fixes ZDI-CAN 16070, CVE-2022-2320.
-
-This vulnerability was discovered by:
-Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
-
-Introduced in c06e27b2f6fd9f7b9f827623a48876a225264132
-
-Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
----
- xkb/xkb.c | 46 +++++++++++++++++++++++++---------------------
- 1 file changed, 25 insertions(+), 21 deletions(-)
-
-diff --git a/xkb/xkb.c b/xkb/xkb.c
-index 64e52611e..34b2c290b 100644
---- a/xkb/xkb.c
-+++ b/xkb/xkb.c
-@@ -6550,7 +6550,8 @@ ProcXkbGetDeviceInfo(ClientPtr client)
- static char *
- CheckSetDeviceIndicators(char *wire,
- DeviceIntPtr dev,
-- int num, int *status_rtrn, ClientPtr client)
-+ int num, int *status_rtrn, ClientPtr client,
-+ xkbSetDeviceInfoReq * stuff)
- {
- xkbDeviceLedsWireDesc *ledWire;
- int i;
-@@ -6558,6 +6559,11 @@ CheckSetDeviceIndicators(char *wire,
-
- ledWire = (xkbDeviceLedsWireDesc *) wire;
- for (i = 0; i < num; i++) {
-+ if (!_XkbCheckRequestBounds(client, stuff, ledWire, ledWire + 1)) {
-+ *status_rtrn = BadLength;
-+ return (char *) ledWire;
-+ }
-+
- if (client->swapped) {
- swaps(&ledWire->ledClass);
- swaps(&ledWire->ledID);
-@@ -6585,6 +6591,11 @@ CheckSetDeviceIndicators(char *wire,
- atomWire = (CARD32 *) &ledWire[1];
- if (nNames > 0) {
- for (n = 0; n < nNames; n++) {
-+ if (!_XkbCheckRequestBounds(client, stuff, atomWire, atomWire + 1)) {
-+ *status_rtrn = BadLength;
-+ return (char *) atomWire;
-+ }
-+
- if (client->swapped) {
- swapl(atomWire);
- }
-@@ -6596,6 +6607,10 @@ CheckSetDeviceIndicators(char *wire,
- mapWire = (xkbIndicatorMapWireDesc *) atomWire;
- if (nMaps > 0) {
- for (n = 0; n < nMaps; n++) {
-+ if (!_XkbCheckRequestBounds(client, stuff, mapWire, mapWire + 1)) {
-+ *status_rtrn = BadLength;
-+ return (char *) mapWire;
-+ }
- if (client->swapped) {
- swaps(&mapWire->virtualMods);
- swapl(&mapWire->ctrls);
-@@ -6647,11 +6662,6 @@ SetDeviceIndicators(char *wire,
- xkbIndicatorMapWireDesc *mapWire;
- XkbSrvLedInfoPtr sli;
-
-- if (!_XkbCheckRequestBounds(client, stuff, ledWire, ledWire + 1)) {
-- *status_rtrn = BadLength;
-- return (char *) ledWire;
-- }
--
- namec = mapc = statec = 0;
- sli = XkbFindSrvLedInfo(dev, ledWire->ledClass, ledWire->ledID,
- XkbXI_IndicatorMapsMask);
-@@ -6670,10 +6680,6 @@ SetDeviceIndicators(char *wire,
- memset((char *) sli->names, 0, XkbNumIndicators * sizeof(Atom));
- for (n = 0, bit = 1; n < XkbNumIndicators; n++, bit <<= 1) {
- if (ledWire->namesPresent & bit) {
-- if (!_XkbCheckRequestBounds(client, stuff, atomWire, atomWire + 1)) {
-- *status_rtrn = BadLength;
-- return (char *) atomWire;
-- }
- sli->names[n] = (Atom) *atomWire;
- if (sli->names[n] == None)
- ledWire->namesPresent &= ~bit;
-@@ -6691,10 +6697,6 @@ SetDeviceIndicators(char *wire,
- if (ledWire->mapsPresent) {
- for (n = 0, bit = 1; n < XkbNumIndicators; n++, bit <<= 1) {
- if (ledWire->mapsPresent & bit) {
-- if (!_XkbCheckRequestBounds(client, stuff, mapWire, mapWire + 1)) {
-- *status_rtrn = BadLength;
-- return (char *) mapWire;
-- }
- sli->maps[n].flags = mapWire->flags;
- sli->maps[n].which_groups = mapWire->whichGroups;
- sli->maps[n].groups = mapWire->groups;
-@@ -6730,13 +6732,17 @@ SetDeviceIndicators(char *wire,
- }
-
- static int
--_XkbSetDeviceInfo(ClientPtr client, DeviceIntPtr dev,
-+_XkbSetDeviceInfoCheck(ClientPtr client, DeviceIntPtr dev,
- xkbSetDeviceInfoReq * stuff)
- {
- char *wire;
-
- wire = (char *) &stuff[1];
- if (stuff->change & XkbXI_ButtonActionsMask) {
-+ int sz = stuff->nBtns * SIZEOF(xkbActionWireDesc);
-+ if (!_XkbCheckRequestBounds(client, stuff, wire, (char *) wire + sz))
-+ return BadLength;
-+
- if (!dev->button) {
- client->errorValue = _XkbErrCode2(XkbErr_BadClass, ButtonClass);
- return XkbKeyboardErrorCode;
-@@ -6747,13 +6753,13 @@ _XkbSetDeviceInfo(ClientPtr client, DeviceIntPtr dev,
- dev->button->numButtons);
- return BadMatch;
- }
-- wire += (stuff->nBtns * SIZEOF(xkbActionWireDesc));
-+ wire += sz;
- }
- if (stuff->change & XkbXI_IndicatorsMask) {
- int status = Success;
-
- wire = CheckSetDeviceIndicators(wire, dev, stuff->nDeviceLedFBs,
-- &status, client);
-+ &status, client, stuff);
- if (status != Success)
- return status;
- }
-@@ -6764,8 +6770,8 @@ _XkbSetDeviceInfo(ClientPtr client, DeviceIntPtr dev,
- }
-
- static int
--_XkbSetDeviceInfoCheck(ClientPtr client, DeviceIntPtr dev,
-- xkbSetDeviceInfoReq * stuff)
-+_XkbSetDeviceInfo(ClientPtr client, DeviceIntPtr dev,
-+ xkbSetDeviceInfoReq * stuff)
- {
- char *wire;
- xkbExtensionDeviceNotify ed;
-@@ -6789,8 +6795,6 @@ _XkbSetDeviceInfoCheck(ClientPtr client, DeviceIntPtr dev,
- if (stuff->firstBtn + stuff->nBtns > nBtns)
- return BadValue;
- sz = stuff->nBtns * SIZEOF(xkbActionWireDesc);
-- if (!_XkbCheckRequestBounds(client, stuff, wire, (char *) wire + sz))
-- return BadLength;
- memcpy((char *) &acts[stuff->firstBtn], (char *) wire, sz);
- wire += sz;
- ed.reason |= XkbXI_ButtonActionsMask;
---
-GitLab
-
diff --git a/source/x/x11/patch/xorg-server/0003-6907b6ea2b4ce949cb07271f5b678d5966d9df42.patch b/source/x/x11/patch/xorg-server/0003-6907b6ea2b4ce949cb07271f5b678d5966d9df42.patch
deleted file mode 100644
index 11121070b..000000000
--- a/source/x/x11/patch/xorg-server/0003-6907b6ea2b4ce949cb07271f5b678d5966d9df42.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From 6907b6ea2b4ce949cb07271f5b678d5966d9df42 Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Tue, 5 Jul 2022 11:11:06 +1000
-Subject: [PATCH] xkb: add request length validation for XkbSetGeometry
-
-No validation of the various fields on that report were done, so a
-malicious client could send a short request that claims it had N
-sections, or rows, or keys, and the server would process the request for
-N sections, running out of bounds of the actual request data.
-
-Fix this by adding size checks to ensure our data is valid.
-
-ZDI-CAN 16062, CVE-2022-2319.
-
-This vulnerability was discovered by:
-Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
-
-Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
----
- xkb/xkb.c | 43 ++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 38 insertions(+), 5 deletions(-)
-
-diff --git a/xkb/xkb.c b/xkb/xkb.c
-index 34b2c290b..4692895db 100644
---- a/xkb/xkb.c
-+++ b/xkb/xkb.c
-@@ -5156,7 +5156,7 @@ _GetCountedString(char **wire_inout, ClientPtr client, char **str)
- }
-
- static Status
--_CheckSetDoodad(char **wire_inout,
-+_CheckSetDoodad(char **wire_inout, xkbSetGeometryReq *req,
- XkbGeometryPtr geom, XkbSectionPtr section, ClientPtr client)
- {
- char *wire;
-@@ -5167,6 +5167,9 @@ _CheckSetDoodad(char **wire_inout,
- Status status;
-
- dWire = (xkbDoodadWireDesc *) (*wire_inout);
-+ if (!_XkbCheckRequestBounds(client, req, dWire, dWire + 1))
-+ return BadLength;
-+
- any = dWire->any;
- wire = (char *) &dWire[1];
- if (client->swapped) {
-@@ -5269,7 +5272,7 @@ _CheckSetDoodad(char **wire_inout,
- }
-
- static Status
--_CheckSetOverlay(char **wire_inout,
-+_CheckSetOverlay(char **wire_inout, xkbSetGeometryReq *req,
- XkbGeometryPtr geom, XkbSectionPtr section, ClientPtr client)
- {
- register int r;
-@@ -5280,6 +5283,9 @@ _CheckSetOverlay(char **wire_inout,
-
- wire = *wire_inout;
- olWire = (xkbOverlayWireDesc *) wire;
-+ if (!_XkbCheckRequestBounds(client, req, olWire, olWire + 1))
-+ return BadLength;
-+
- if (client->swapped) {
- swapl(&olWire->name);
- }
-@@ -5291,6 +5297,9 @@ _CheckSetOverlay(char **wire_inout,
- xkbOverlayKeyWireDesc *kWire;
- XkbOverlayRowPtr row;
-
-+ if (!_XkbCheckRequestBounds(client, req, rWire, rWire + 1))
-+ return BadLength;
-+
- if (rWire->rowUnder > section->num_rows) {
- client->errorValue = _XkbErrCode4(0x20, r, section->num_rows,
- rWire->rowUnder);
-@@ -5299,6 +5308,9 @@ _CheckSetOverlay(char **wire_inout,
- row = XkbAddGeomOverlayRow(ol, rWire->rowUnder, rWire->nKeys);
- kWire = (xkbOverlayKeyWireDesc *) &rWire[1];
- for (k = 0; k < rWire->nKeys; k++, kWire++) {
-+ if (!_XkbCheckRequestBounds(client, req, kWire, kWire + 1))
-+ return BadLength;
-+
- if (XkbAddGeomOverlayKey(ol, row,
- (char *) kWire->over,
- (char *) kWire->under) == NULL) {
-@@ -5332,6 +5344,9 @@ _CheckSetSections(XkbGeometryPtr geom,
- register int r;
- xkbRowWireDesc *rWire;
-
-+ if (!_XkbCheckRequestBounds(client, req, sWire, sWire + 1))
-+ return BadLength;
-+
- if (client->swapped) {
- swapl(&sWire->name);
- swaps(&sWire->top);
-@@ -5357,6 +5372,9 @@ _CheckSetSections(XkbGeometryPtr geom,
- XkbRowPtr row;
- xkbKeyWireDesc *kWire;
-
-+ if (!_XkbCheckRequestBounds(client, req, rWire, rWire + 1))
-+ return BadLength;
-+
- if (client->swapped) {
- swaps(&rWire->top);
- swaps(&rWire->left);
-@@ -5371,6 +5389,9 @@ _CheckSetSections(XkbGeometryPtr geom,
- for (k = 0; k < rWire->nKeys; k++, kWire++) {
- XkbKeyPtr key;
-
-+ if (!_XkbCheckRequestBounds(client, req, kWire, kWire + 1))
-+ return BadLength;
-+
- key = XkbAddGeomKey(row);
- if (!key)
- return BadAlloc;
-@@ -5396,7 +5417,7 @@ _CheckSetSections(XkbGeometryPtr geom,
- register int d;
-
- for (d = 0; d < sWire->nDoodads; d++) {
-- status = _CheckSetDoodad(&wire, geom, section, client);
-+ status = _CheckSetDoodad(&wire, req, geom, section, client);
- if (status != Success)
- return status;
- }
-@@ -5405,7 +5426,7 @@ _CheckSetSections(XkbGeometryPtr geom,
- register int o;
-
- for (o = 0; o < sWire->nOverlays; o++) {
-- status = _CheckSetOverlay(&wire, geom, section, client);
-+ status = _CheckSetOverlay(&wire, req, geom, section, client);
- if (status != Success)
- return status;
- }
-@@ -5439,6 +5460,9 @@ _CheckSetShapes(XkbGeometryPtr geom,
- xkbOutlineWireDesc *olWire;
- XkbOutlinePtr ol;
-
-+ if (!_XkbCheckRequestBounds(client, req, shapeWire, shapeWire + 1))
-+ return BadLength;
-+
- shape =
- XkbAddGeomShape(geom, shapeWire->name, shapeWire->nOutlines);
- if (!shape)
-@@ -5449,12 +5473,18 @@ _CheckSetShapes(XkbGeometryPtr geom,
- XkbPointPtr pt;
- xkbPointWireDesc *ptWire;
-
-+ if (!_XkbCheckRequestBounds(client, req, olWire, olWire + 1))
-+ return BadLength;
-+
- ol = XkbAddGeomOutline(shape, olWire->nPoints);
- if (!ol)
- return BadAlloc;
- ol->corner_radius = olWire->cornerRadius;
- ptWire = (xkbPointWireDesc *) &olWire[1];
- for (p = 0, pt = ol->points; p < olWire->nPoints; p++, pt++, ptWire++) {
-+ if (!_XkbCheckRequestBounds(client, req, ptWire, ptWire + 1))
-+ return BadLength;
-+
- pt->x = ptWire->x;
- pt->y = ptWire->y;
- if (client->swapped) {
-@@ -5560,12 +5590,15 @@ _CheckSetGeom(XkbGeometryPtr geom, xkbSetGeometryReq * req, ClientPtr client)
- return status;
-
- for (i = 0; i < req->nDoodads; i++) {
-- status = _CheckSetDoodad(&wire, geom, NULL, client);
-+ status = _CheckSetDoodad(&wire, req, geom, NULL, client);
- if (status != Success)
- return status;
- }
-
- for (i = 0; i < req->nKeyAliases; i++) {
-+ if (!_XkbCheckRequestBounds(client, req, wire, wire + XkbKeyNameLength))
-+ return BadLength;
-+
- if (XkbAddGeomKeyAlias(geom, &wire[XkbKeyNameLength], wire) == NULL)
- return BadAlloc;
- wire += 2 * XkbKeyNameLength;
---
-GitLab
-
diff --git a/source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch b/source/x/x11/patch/xorg-server/failed/0001-Always-install-vbe-and-int10-sdk-headers.patch
index c613eb8f9..c613eb8f9 100644
--- a/source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch
+++ b/source/x/x11/patch/xorg-server/failed/0001-Always-install-vbe-and-int10-sdk-headers.patch
diff --git a/source/x/x11/patch/xorg-server/fix-pci-segfault.diff b/source/x/x11/patch/xorg-server/fix-pci-segfault.diff
deleted file mode 100644
index 400376287..000000000
--- a/source/x/x11/patch/xorg-server/fix-pci-segfault.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
-index cef47da03d0e91e6a56a5e3cb14a51d931633eff..dadbac6c8f0ae6f3d636fdfe245e61bc0c98581d 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);
- }