diff options
Diffstat (limited to 'xorg-server-hwcursor-gamma')
3 files changed, 108 insertions, 2 deletions
diff --git a/xorg-server-hwcursor-gamma/0001-glamor-make-current-in-prepare-paths.patch b/xorg-server-hwcursor-gamma/0001-glamor-make-current-in-prepare-paths.patch new file mode 100644 index 0000000..6167395 --- /dev/null +++ b/xorg-server-hwcursor-gamma/0001-glamor-make-current-in-prepare-paths.patch @@ -0,0 +1,34 @@ +From 422a9f7f37eb6027fa4d20a4be208978832be6d6 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Wed, 15 Jul 2015 17:54:03 +1000 +Subject: [PATCH] glamor: make current in prepare paths + +Lots of the accel paths only make current once they start +doing someting, so a lot of them call the bail paths without +make current, which means on PRIME systems for example +we end up in the wrong context. + +Add a prepare pixmap in the prepare fallback path. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90667 +Signed-off-by: Dave Airlie <airlied@redhat.com> +--- + glamor/glamor_prepare.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/glamor/glamor_prepare.c b/glamor/glamor_prepare.c +index 9bfc557..68fb58f 100644 +--- a/glamor/glamor_prepare.c ++++ b/glamor/glamor_prepare.c +@@ -45,6 +45,8 @@ glamor_prep_pixmap_box(PixmapPtr pixmap, glamor_access_t access, BoxPtr box) + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv)) + return TRUE; + ++ glamor_make_current(glamor_priv); ++ + RegionInit(®ion, box, 1); + + /* See if it's already mapped */ +-- +2.4.3 + diff --git a/xorg-server-hwcursor-gamma/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch b/xorg-server-hwcursor-gamma/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch new file mode 100644 index 0000000..b3a7d2e --- /dev/null +++ b/xorg-server-hwcursor-gamma/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch @@ -0,0 +1,63 @@ +From 7cc7ffd25d5e50b54cb942d07d4cb160f20ff9c5 Mon Sep 17 00:00:00 2001 +From: Martin Peres <martin.peres@linux.intel.com> +Date: Fri, 17 Jul 2015 17:21:26 +0300 +Subject: [PATCH] os: make sure the clientsWritable fd_set is initialized + before use + +In WaitForSomething(), the fd_set clientsWritable may be used unitialized when +the boolean AnyClientsWriteBlocked is set in the WakeupHandler(). This leads to +a crash in FlushAllOutput() after x11proto's commit +2c94cdb453bc641246cc8b9a876da9799bee1ce7. + +The problem did not manifest before because both the XFD_SIZE and the maximum +number of clients were set to 256. As the connectionTranslation table was +initalized for the 256 clients to 0, the test on the index not being 0 was +aborting before dereferencing the client #0. + +As of commit 2c94cdb453bc641246cc8b9a876da9799bee1ce7 in x11proto, the XFD_SIZE +got bumped to 512. This lead the OutputPending fd_set to have any fd above 256 +to be uninitialized which in turns lead to reading an index after the end of +the ConnectionTranslation table. This index would then be used to find the +client corresponding to the fd marked as pending writes and would also result +to an out-of-bound access which would usually be the fatal one. + +Fix this by zeroing the clientsWritable fd_set at the beginning of +WaitForSomething(). In this case, the bottom part of the loop, which would +indirectly call FlushAllOutput, will not do any work but the next call to +select will result in the execution of the right codepath. This is exactly what +we want because we need to know the writable clients before handling them. In +the end, it also makes sure that the fds above MaxClient are initialized, +preventing the crash in FlushAllOutput(). + +Thanks to everyone involved in tracking this one down! + +Reported-by: Karol Herbst <freedesktop@karolherbst.de> +Reported-by: Tobias Klausmann <tobias.klausmann@mni.thm.de> +Signed-off-by: Martin Peres <martin.peres@linux.intel.com> +Tested-by: Martin Peres <martin.peres@linux.intel.com> +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91316 +Cc: Ilia Mirkin <imirkin@alum.mit.edu> +Cc: Martin Peres <martin.peres@linux.intel.com> +Cc: Olivier Fourdan <ofourdan@redhat.com +Cc: Adam Jackson <ajax@redhat.com> +Cc: Alan Coopersmith <alan.coopersmith@oracle.com +Cc: Chris Wilson <chris@chris-wilson.co.uk> +--- + os/WaitFor.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/os/WaitFor.c b/os/WaitFor.c +index 431f1a6..993c14e 100644 +--- a/os/WaitFor.c ++++ b/os/WaitFor.c +@@ -158,6 +158,7 @@ WaitForSomething(int *pClientsReady) + Bool someReady = FALSE; + + FD_ZERO(&clientsReadable); ++ FD_ZERO(&clientsWritable); + + if (nready) + SmartScheduleStopTimer(); +-- +2.4.5 + diff --git a/xorg-server-hwcursor-gamma/PKGBUILD b/xorg-server-hwcursor-gamma/PKGBUILD index 753ad39..8035ab9 100644 --- a/xorg-server-hwcursor-gamma/PKGBUILD +++ b/xorg-server-hwcursor-gamma/PKGBUILD @@ -5,7 +5,7 @@ _pkgname=xorg-server pkgname=xorg-server-hwcursor-gamma pkgver=1.17.2 -pkgrel=1 +pkgrel=2 pkgdesc="Xorg X server with patch to apply gamma ramps on hardware cursors" depends=(libepoxy libxdmcp libxfont libpciaccess libdrm pixman libgcrypt libxau xorg-server-common xf86-input-evdev libxshmfence libgl) provides=("xorg-server=${pkgver}" 'X-ABI-VIDEODRV_VERSION=19' 'X-ABI-XINPUT_VERSION=21.1' 'X-ABI-EXTENSION_VERSION=9.0' 'x-server') @@ -27,6 +27,8 @@ source=(${url}/releases/individual/xserver/${_pkgname}-${pkgver}.tar.bz2 xvfb-run.1 0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch 0002-dix-hook-up-the-unaccelerated-valuator-masks.patch + 0001-glamor-make-current-in-prepare-paths.patch + 0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch 0001-When-an-cursor-is-set-it-is-adjusted-to-use-the.patch 0002-Fix-for-full-and-semi-transparency-under-negative-im.patch 0003-Use-Harms-s-suggest-do-not-use-inline-if.-And-fix-si.patch) @@ -36,6 +38,8 @@ sha256sums=('f61120612728f2c5034671d0ca3e2273438c60aba93b3dda4a8aa40e6a257993' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' '3dc795002b8763a7d29db94f0af200131da9ce5ffc233bfd8916060f83a8fad7' '416a1422eed71efcebb1d893de74e7f27e408323a56c4df003db37f5673b3f96' + '793579adbef979088cadc0fd9ce0c24df0455a6936d3de7a9356df537b7d9a81' + 'efc05c06af2bfdf588ef7a60b44c1d180fb353b1bffdfdf96415d63690b6e394' 'bea348631dedd66475d84ac2cfe0840f22a80a642b4680d73fead4749e47f055' 'be9169b937b5d0b44f7f05d7c08aaa5f0c1092e128ce261d9cb350f09dfe1fb0' '0a643ae83e03faee0f4db669a33c5b3c99edbba5c86cde2c83962ae536d31081') @@ -51,11 +55,16 @@ prepare() { msg2 'Fix FS#45229, merged upstream' patch -Np1 -i ../0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch patch -Np1 -i ../0002-dix-hook-up-the-unaccelerated-valuator-masks.patch + + msg2 "Fix FS#45009, merged upstream" + patch -Np1 -i ../0001-glamor-make-current-in-prepare-paths.patch + patch -Np1 -i ../0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch + + autoreconf -fvi } build() { cd "${_pkgname}-${pkgver}" - autoreconf -fi ./configure --prefix=/usr \ --enable-ipv6 \ --enable-dri \ |