Xext/panoramiXprocs.c | 4 Xext/saver.c | 2 Xext/shm.c | 17 Xi/exevents.c | 3 configure.ac | 28 - debian/changelog | 32 + debian/control | 6 debian/patches/os-treat-ssh-as-a-non-local-client.diff | 97 --- debian/patches/randr-adjust-masters-last-set-time.diff | 39 + debian/patches/randr-do-not-check-the-screen-size.diff | 87 +++ debian/patches/series | 8 debian/rules | 2 dix/cursor.c | 23 dix/devices.c | 3 dix/enterleave.c | 20 dix/ptrveloc.c | 10 exa/exa_glyphs.c | 8 exa/exa_render.c | 3 glamor/glamor.c | 45 + glamor/glamor.h | 1 glamor/glamor_composite_glyphs.c | 5 glamor/glamor_compositerects.c | 18 glamor/glamor_copy.c | 8 glamor/glamor_dash.c | 3 glamor/glamor_egl.c | 11 glamor/glamor_fbo.c | 4 glamor/glamor_priv.h | 28 + glamor/glamor_program.c | 8 glamor/glamor_render.c | 94 ++- glamor/glamor_spans.c | 3 glamor/glamor_text.c | 13 glamor/glamor_transfer.c | 3 glamor/glamor_transform.c | 12 glamor/glamor_transform.h | 4 glx/glxext.c | 6 hw/kdrive/linux/keyboard.c | 441 ----------------- hw/xfree86/common/xf86Config.c | 68 +- hw/xfree86/common/xf86Configure.c | 2 hw/xfree86/common/xf86Init.c | 4 hw/xfree86/common/xf86Privstr.h | 1 hw/xfree86/drivers/modesetting/Makefile.am | 2 hw/xfree86/drivers/modesetting/driver.c | 85 ++- hw/xfree86/drivers/modesetting/drmmode_display.c | 99 ++- hw/xfree86/drivers/modesetting/drmmode_display.h | 2 hw/xfree86/drivers/modesetting/present.c | 9 hw/xfree86/drivers/modesetting/sh3224.c | 140 +++++ hw/xfree86/drivers/modesetting/sh3224.h | 7 hw/xfree86/int10/xf86x86emu.c | 2 hw/xfree86/man/xorg.conf.man | 4 hw/xfree86/modes/xf86Crtc.c | 3 hw/xfree86/os-support/linux/lnx_init.c | 10 hw/xfree86/x86emu/x86emu/regs.h | 8 hw/xquartz/bundle/Info.plist.cpp | 23 hw/xquartz/bundle/Makefile.am | 6 hw/xwayland/xwayland-cursor.c | 15 hw/xwayland/xwayland-glamor-xv.c | 2 hw/xwayland/xwayland-glamor.c | 3 hw/xwayland/xwayland-output.c | 17 hw/xwayland/xwayland-shm.c | 10 hw/xwayland/xwayland.h | 2 include/xkbsrv.h | 4 os/access.c | 44 + present/present.c | 33 - randr/rrprovider.c | 2 render/picture.h | 2 xkb/xkb.c | 5 xkb/xkbEvents.c | 2 xkb/xkbLEDs.c | 2 68 files changed, 933 insertions(+), 784 deletions(-)
New commits: commit 196add85e71375e06d22197e27dd4ef386307f86 Author: Timo Aaltonen <[email protected]> Date: Thu Sep 1 12:31:38 2016 +0300 upload to trusty diff --git a/debian/changelog b/debian/changelog index 264e977..7e66326 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +xorg-server-lts-xenial (2:1.18.4-0ubuntu0.1~trusty1) trusty; urgency=medium + + * Backport for lts-xenial stack. + + -- Timo Aaltonen <[email protected]> Thu, 01 Sep 2016 10:39:51 +0300 + xorg-server (2:1.18.4-0ubuntu0.1) xenial; urgency=medium * New upstream bugfix release. commit 0312f308b88671d21bcb638ec04cb2ff007bc6b0 Author: Timo Aaltonen <[email protected]> Date: Thu Sep 1 10:28:40 2016 +0300 release to xenial diff --git a/debian/changelog b/debian/changelog index f23f72f..fd9b166 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xorg-server (2:1.18.4-0ubuntu0.1) UNRELEASED; urgency=medium +xorg-server (2:1.18.4-0ubuntu0.1) xenial; urgency=medium * New upstream bugfix release. * randr-adjust-masters-last-set-time.diff, @@ -6,7 +6,7 @@ xorg-server (2:1.18.4-0ubuntu0.1) UNRELEASED; urgency=medium Fix issues changing display mode on prime setups. (LP: #1586260) * os-treat-ssh-as-a-non-local-client.diff: Dropped, upstream. - -- Timo Aaltonen <[email protected]> Mon, 01 Aug 2016 14:36:15 +0300 + -- Timo Aaltonen <[email protected]> Thu, 01 Sep 2016 10:28:26 +0300 xorg-server (2:1.18.3-1ubuntu2.3) xenial; urgency=medium commit c6ce7b801c20321af2c1a1d71c120e5aa7388215 Author: Timo Aaltonen <[email protected]> Date: Thu Sep 1 10:28:24 2016 +0300 os-treat-ssh-as-a-non-local-client.diff: Dropped, upstream. diff --git a/debian/changelog b/debian/changelog index 7053a70..f23f72f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,7 @@ xorg-server (2:1.18.4-0ubuntu0.1) UNRELEASED; urgency=medium * randr-adjust-masters-last-set-time.diff, randr-do-not-check-the-screen-size.diff: Fix issues changing display mode on prime setups. (LP: #1586260) + * os-treat-ssh-as-a-non-local-client.diff: Dropped, upstream. -- Timo Aaltonen <[email protected]> Mon, 01 Aug 2016 14:36:15 +0300 diff --git a/debian/patches/os-treat-ssh-as-a-non-local-client.diff b/debian/patches/os-treat-ssh-as-a-non-local-client.diff deleted file mode 100644 index 0b879bf..0000000 --- a/debian/patches/os-treat-ssh-as-a-non-local-client.diff +++ /dev/null @@ -1,97 +0,0 @@ -commit adefbaee499b9679c6cac21f52ec6545af2b36b5 -Author: Adam Jackson <[email protected]> -Date: Mon Mar 28 18:11:09 2016 +0900 - - os: Treat ssh as a non-local client (v4) - - By the time we get to ComputeLocalClient, we've already done - NextAvailableClient → ReserveClientIds → DetermineClientCmd (assuming - we're built with #define CLIENTIDS), so we can look up the name of the - client process and refuse to treat ssh's X forwarding as if it were - local. - - v2: (Michel Dänzer) - * Only match "ssh" itself, not other executable names starting with - that prefix. - * Ignore executable path for the match. - v3: (Michel Dänzer) - * Use GetClientCmdName (Mark Kettenis) - * Perform check on Windows as well, but only ignore path on Cygwin - (Martin Peres, Emil Velikov, Jon Turney) - v4: (Michel Dänzer) - * Cut of any colon and whatever comes after it. (Adam Jackson) - * Add bugzilla reference. - - Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261 - - Signed-off-by: Adam Jackson <[email protected]> - Signed-off-by: Michel Dänzer <[email protected]> - -diff --git a/os/access.c b/os/access.c -index 8b2177f..58f95a9 100644 ---- a/os/access.c -+++ b/os/access.c -@@ -173,6 +173,10 @@ SOFTWARE. - - #endif /* WIN32 */ - -+#if !defined(WIN32) || defined(__CYGWIN__) -+#include <libgen.h> -+#endif -+ - #define X_INCLUDE_NETDB_H - #include <X11/Xos_r.h> - -@@ -1080,9 +1084,8 @@ ResetHosts(const char *display) - } - } - --/* Is client on the local host */ --Bool --ComputeLocalClient(ClientPtr client) -+static Bool -+xtransLocalClient(ClientPtr client) - { - int alen, family, notused; - Xtransaddr *from = NULL; -@@ -1115,6 +1118,40 @@ ComputeLocalClient(ClientPtr client) - return FALSE; - } - -+/* Is client on the local host */ -+Bool -+ComputeLocalClient(ClientPtr client) -+{ -+ const char *cmdname = GetClientCmdName(client); -+ -+ if (!xtransLocalClient(client)) -+ return FALSE; -+ -+ /* If the executable name is "ssh", assume that this client connection -+ * is forwarded from another host via SSH -+ */ -+ if (cmdname) { -+ char **cmd; -+ Bool ret; -+ -+ /* Cut off any colon and whatever comes after it, see -+ * https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html -+ */ -+ cmd = xstrtokenize(cmdname, ":"); -+ -+#if !defined(WIN32) || defined(__CYGWIN__) -+ cmd[0] = basename(cmd[0]); -+#endif -+ -+ ret = strcmp(cmd[0], "ssh") != 0; -+ free(cmd); -+ -+ return ret; -+ } -+ -+ return TRUE; -+} -+ - /* - * Return the uid and all gids of a connected local client - * Allocates a LocalClientCredRec - caller must call FreeLocalClientCreds diff --git a/debian/patches/series b/debian/patches/series index c204c32..d907d2f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,7 +5,6 @@ 03_static-nettle.diff 05_Revert-Unload-submodules.diff #08_xfree86_fix_ia64_inx_outx.diff -os-treat-ssh-as-a-non-local-client.diff ## Ubuntu patches, not upstreamable commit ed8e88627eed6260a3168d42ddeb75b52f26c5e4 Author: Timo Aaltonen <[email protected]> Date: Thu Sep 1 10:04:18 2016 +0300 randr-adjust-masters-last-set-time.diff, randr-do-not-check-the-screen-size.diff: Fix issues changing display mode on prime setups. (LP: #1586260) diff --git a/debian/changelog b/debian/changelog index 3437abc..7053a70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,9 @@ xorg-server (2:1.18.4-0ubuntu0.1) UNRELEASED; urgency=medium * New upstream bugfix release. + * randr-adjust-masters-last-set-time.diff, + randr-do-not-check-the-screen-size.diff: + Fix issues changing display mode on prime setups. (LP: #1586260) -- Timo Aaltonen <[email protected]> Mon, 01 Aug 2016 14:36:15 +0300 diff --git a/debian/patches/randr-adjust-masters-last-set-time.diff b/debian/patches/randr-adjust-masters-last-set-time.diff new file mode 100644 index 0000000..15f8404 --- /dev/null +++ b/debian/patches/randr-adjust-masters-last-set-time.diff @@ -0,0 +1,39 @@ +Subject: [PATCH xserver] randr: Adjust master's last set time with slaves +From: Nikhil Mahale <[email protected]> +Date: 20.05.2016 08:01 +To: <[email protected]> +CC: Nikhil Mahale <[email protected]> + +In prime configurations master's last set time may not be latest +and greatest, adjust it with slaves last set time, pick up greatest +one. Otherwise xserver may end with events which has +lastSetTime < lastConfigTime even if that's not +the case and confuse xrandr client. + +Signed-off-by: Nikhil Mahale <[email protected]> +--- + randr/randr.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/randr/randr.c b/randr/randr.c +index 3aabb19..c07def1 100644 +--- a/randr/randr.c ++++ b/randr/randr.c +@@ -584,6 +585,15 @@ RRTellChanged(ScreenPtr pScreen) + mastersp = pScrPriv; + } + ++ xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) { ++ pSlaveScrPriv = rrGetScrPriv(iter); ++ ++ if (CompareTimeStamps(mastersp->lastSetTime, ++ pSlaveScrPriv->lastSetTime) == EARLIER) { ++ mastersp->lastSetTime = pSlaveScrPriv->lastSetTime; ++ } ++ } ++ + if (mastersp->changed) { + UpdateCurrentTimeIf(); + if (mastersp->configChanged) { +-- 2.8.2 ----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ----------------------------------------------------------------------------------- _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel + diff --git a/debian/patches/randr-do-not-check-the-screen-size.diff b/debian/patches/randr-do-not-check-the-screen-size.diff new file mode 100644 index 0000000..ca294b7 --- /dev/null +++ b/debian/patches/randr-do-not-check-the-screen-size.diff @@ -0,0 +1,87 @@ +Subject: [PATCH xserver] randr: Do not check the screen size bound for gpu screens +From: Nikhil Mahale <[email protected]> +Date: 20.05.2016 08:00 +To: <[email protected]> +CC: Nikhil Mahale <[email protected]> + +For gpu screen, CrtcSet set/adjust the master screen size along +mode in following callstack - + + ProcRRSetCrtcConfig() + | + -> RRCrtcSet() + | + -> rrCheckPixmapBounding() + | + -> pScrPriv->rrScreenSetSize() + +Checking screen size bound for gpus screen cause some configurations +to fails, e.g + + $ xrandr --output eDP --mode 1920x1080 --pos 0x0 --output HDMI \ + --mode 2560x1440 --pos 0x0 + + Here xrandr utility first sets screen size to 2560x1440 which + gets resized to 1920x1080 on RRSetCrtcConfig request for eDP, + and then RRSetCrtcConfig request for HDMI fails because + of failure of screen bound check. + +Signed-off-by: Nikhil Mahale <[email protected]> +--- + randr/rrcrtc.c | 19 ++++++------------- + 1 file changed, 6 insertions(+), 13 deletions(-) + +diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c +index 566a3db..82db9a8 100644 +--- a/randr/rrcrtc.c ++++ b/randr/rrcrtc.c +@@ -1176,27 +1176,20 @@ ProcRRSetCrtcConfig(ClientPtr client) + + #ifdef RANDR_12_INTERFACE + /* ++ * For gpu screen, CrtcSet set/adjust the master screen size along ++ * with mode. ++ * + * Check screen size bounds if the DDX provides a 1.2 interface + * for setting screen size. Else, assume the CrtcSet sets + * the size along with the mode. If the driver supports transforms, + * then it must allow crtcs to display a subset of the screen, so + * only do this check for drivers without transform support. + */ +- if (pScrPriv->rrScreenSetSize && !crtc->transforms) { ++ if (!pScreen->isGPU && pScrPriv->rrScreenSetSize && !crtc->transforms) { + int source_width; + int source_height; + PictTransform transform; + struct pixman_f_transform f_transform, f_inverse; +- int width, height; +- +- if (pScreen->isGPU) { +- width = pScreen->current_master->width; +- height = pScreen->current_master->height; +- } +- else { +- width = pScreen->width; +- height = pScreen->height; +- } + + RRTransformCompute(stuff->x, stuff->y, + mode->mode.width, mode->mode.height, +@@ -1206,13 +1199,13 @@ ProcRRSetCrtcConfig(ClientPtr client) + + RRModeGetScanoutSize(mode, &transform, &source_width, + &source_height); +- if (stuff->x + source_width > width) { ++ if (stuff->x + source_width > pScreen->width) { + client->errorValue = stuff->x; + free(outputs); + return BadValue; + } + +- if (stuff->y + source_height > height) { ++ if (stuff->y + source_height > pScreen->height) { + client->errorValue = stuff->y; + free(outputs); + return BadValue; +-- 2.8.2 ----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ----------------------------------------------------------------------------------- _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel + diff --git a/debian/patches/series b/debian/patches/series index 891be0f..c204c32 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -50,3 +50,5 @@ xmir.patch xmir-desktop-file-hint-flag.patch drm_device_keep_trying.patch xi2-resize-touch.patch +randr-adjust-masters-last-set-time.diff +randr-do-not-check-the-screen-size.diff commit 1d6934222e1d25e77cd0afd34428adb3742698ff Author: Timo Aaltonen <[email protected]> Date: Wed Aug 17 16:27:02 2016 +0300 released to trusty diff --git a/debian/changelog b/debian/changelog index b58e9ba..e6474e6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xorg-server-lts-xenial (2:1.18.3-1ubuntu2.2~trusty2) UNRELEASED; urgency=medium +xorg-server-lts-xenial (2:1.18.3-1ubuntu2.2~trusty2) trusty; urgency=medium * Don't revert configurable maxclients, just revert needing the new coreproto and use an internal copy of Xpoll.h from x11proto-core-dev @@ -6,7 +6,7 @@ xorg-server-lts-xenial (2:1.18.3-1ubuntu2.2~trusty2) UNRELEASED; urgency=medium * Don't build -legacy-lts-xenial, the wrapper is still in x11-common and this is not needed on trusty. - -- Timo Aaltonen <[email protected]> Wed, 03 Aug 2016 11:05:22 +0300 + -- Timo Aaltonen <[email protected]> Wed, 03 Aug 2016 14:38:42 +0300 xorg-server-lts-xenial (2:1.18.3-1ubuntu2.2~trusty1) trusty; urgency=medium commit cd370cffa036c5d6948e24cf2f9c23195c9323be Author: Timo Aaltonen <[email protected]> Date: Mon Aug 1 14:40:58 2016 +0300 New upstream bugfix release. diff --git a/debian/changelog b/debian/changelog index 8d51676..3437abc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +xorg-server (2:1.18.4-0ubuntu0.1) UNRELEASED; urgency=medium + + * New upstream bugfix release. + + -- Timo Aaltonen <[email protected]> Mon, 01 Aug 2016 14:36:15 +0300 + xorg-server (2:1.18.3-1ubuntu2.3) xenial; urgency=medium [ Timo Aaltonen ] commit 93b5b3bf09b2c82f168b73097bfe2d43ca0572d6 Author: Timo Aaltonen <[email protected]> Date: Thu Jul 21 08:29:03 2016 +0300 release to xenial diff --git a/debian/changelog b/debian/changelog index ed6b1f8..8d51676 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xorg-server (2:1.18.3-1ubuntu2.3) UNRELEASED; urgency=medium +xorg-server (2:1.18.3-1ubuntu2.3) xenial; urgency=medium [ Timo Aaltonen ] * control: Add Conflicts/Replaces on xserver-xorg-video-glamoregl. @@ -8,7 +8,7 @@ xorg-server (2:1.18.3-1ubuntu2.3) UNRELEASED; urgency=medium * debian/control, debian/rules: - Build xmir for arm64 (LP: #1604851). - -- Timo Aaltonen <[email protected]> Tue, 05 Jul 2016 01:53:51 +0300 + -- Timo Aaltonen <[email protected]> Thu, 21 Jul 2016 08:27:07 +0300 xorg-server (2:1.18.3-1ubuntu2.2) xenial; urgency=medium commit 63aa20ed8198bda44f93ff5f0725a7af0ab5a15b Author: Timo Aaltonen <[email protected]> Date: Thu Jul 21 06:09:32 2016 +0300 control, rules: Build xmir for arm64 diff --git a/debian/changelog b/debian/changelog index 429139c..ed6b1f8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,13 @@ xorg-server (2:1.18.3-1ubuntu2.3) UNRELEASED; urgency=medium + [ Timo Aaltonen ] * control: Add Conflicts/Replaces on xserver-xorg-video-glamoregl. (LP: #1574320) + [ Łukasz 'sil2100' Zemczak ] + * debian/control, debian/rules: + - Build xmir for arm64 (LP: #1604851). + -- Timo Aaltonen <[email protected]> Tue, 05 Jul 2016 01:53:51 +0300 xorg-server (2:1.18.3-1ubuntu2.2) xenial; urgency=medium diff --git a/debian/control b/debian/control index 9f5e9f0..9843ce2 100644 --- a/debian/control +++ b/debian/control @@ -103,7 +103,7 @@ Build-Depends: # systemd-daemon libsystemd-dev [linux-any], # XMir - libmirclient-dev (>= 0.13.1) [!arm64 !powerpc !ppc64el !s390x], + libmirclient-dev (>= 0.13.1) [!powerpc !ppc64el !s390x], mir-client-platform-mesa-dev, Standards-Version: 3.9.6 Vcs-Git: https://anonscm.debian.org/git/pkg-xorg/xserver/xorg-server.git @@ -224,7 +224,7 @@ Depends: libxkbfile-dev, libpciaccess-dev, mesa-common-dev, - libmirclient-dev [!arm64 !powerpc !ppc64el], + libmirclient-dev [!powerpc !ppc64el], mir-client-platform-mesa-dev, ${misc:Depends}, Description: Xorg X server - development files @@ -384,7 +384,7 @@ Description: common files used by various X servers This package provides files necessary for all X.Org based X servers. Package: xmir -Architecture: amd64 armhf i386 +Architecture: amd64 arm64 armhf i386 Depends: xserver-common (>= ${source:Version}), ${shlibs:Depends}, diff --git a/debian/rules b/debian/rules index 9169ed7..f3ddb43 100755 --- a/debian/rules +++ b/debian/rules @@ -58,7 +58,7 @@ else endif # Mir isn't built on PPC -ifneq (,$(filter $(DEB_HOST_ARCH), arm64 powerpc ppc64el s390x)) +ifneq (,$(filter $(DEB_HOST_ARCH), powerpc ppc64el s390x)) build_xmir = --disable-xmir endif commit 8b312db7d1d98be67f0283d982428545cf948a66 Author: Adam Jackson <[email protected]> Date: Tue Jul 19 13:27:08 2016 -0400 xserver 1.18.4 Signed-off-by: Adam Jackson <[email protected]> diff --git a/configure.ac b/configure.ac index cfffcd8..868e859 100644 --- a/configure.ac +++ b/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.18.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2016-04-04" -RELEASE_NAME="Halloumi" +AC_INIT([xorg-server], 1.18.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2016-07-19" +RELEASE_NAME="Skordalia" AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) commit 42a74080ffe93502904ede7555652f01ab11d12d Author: Michel Dänzer <[email protected]> Date: Wed Mar 30 18:23:04 2016 +0900 os: Use strtok instead of xstrtokenize in ComputeLocalClient Fixes leaking the memory pointed to by the members of the array returned by xstrtokenize. Reviewed-by: Adam Jackson <[email protected]> (cherry picked from commit e156c0ccb530897d3a428255bd5585f7ea7b9b41) diff --git a/os/access.c b/os/access.c index 08c4fd0..dac6f49 100644 --- a/os/access.c +++ b/os/access.c @@ -1132,19 +1132,20 @@ ComputeLocalClient(ClientPtr client) * is forwarded from another host via SSH */ if (cmdname) { - char **cmd; + char *cmd = strdup(cmdname); Bool ret; /* Cut off any colon and whatever comes after it, see * https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html */ - cmd = xstrtokenize(cmdname, ":"); + cmd = strtok(cmd, ":"); #if !defined(WIN32) || defined(__CYGWIN__) - cmd[0] = basename(cmd[0]); + ret = strcmp(basename(cmd), "ssh") != 0; +#else + ret = strcmp(cmd, "ssh") != 0; #endif - ret = strcmp(cmd[0], "ssh") != 0; free(cmd); return ret; commit 3c4cead499f10dabac20ab87728746ec41dae799 Author: Adam Jackson <[email protected]> Date: Mon Mar 28 18:11:09 2016 +0900 os: Treat ssh as a non-local client (v4) By the time we get to ComputeLocalClient, we've already done NextAvailableClient → ReserveClientIds → DetermineClientCmd (assuming we're built with #define CLIENTIDS), so we can look up the name of the client process and refuse to treat ssh's X forwarding as if it were local. v2: (Michel Dänzer) * Only match "ssh" itself, not other executable names starting with that prefix. * Ignore executable path for the match. v3: (Michel Dänzer) * Use GetClientCmdName (Mark Kettenis) * Perform check on Windows as well, but only ignore path on Cygwin (Martin Peres, Emil Velikov, Jon Turney) v4: (Michel Dänzer) * Cut of any colon and whatever comes after it. (Adam Jackson) * Add bugzilla reference. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261 Signed-off-by: Adam Jackson <[email protected]> Signed-off-by: Michel Dänzer <[email protected]> (cherry picked from commit adefbaee499b9679c6cac21f52ec6545af2b36b5) diff --git a/os/access.c b/os/access.c index 2499a9f..08c4fd0 100644 --- a/os/access.c +++ b/os/access.c @@ -173,6 +173,10 @@ SOFTWARE. #endif /* WIN32 */ +#if !defined(WIN32) || defined(__CYGWIN__) +#include <libgen.h> +#endif + #define X_INCLUDE_NETDB_H #include <X11/Xos_r.h> @@ -1081,9 +1085,8 @@ ResetHosts(const char *display) } } -/* Is client on the local host */ -Bool -ComputeLocalClient(ClientPtr client) +static Bool +xtransLocalClient(ClientPtr client) { int alen, family, notused; Xtransaddr *from = NULL; @@ -1116,6 +1119,40 @@ ComputeLocalClient(ClientPtr client) return FALSE; } +/* Is client on the local host */ +Bool +ComputeLocalClient(ClientPtr client) +{ + const char *cmdname = GetClientCmdName(client); + + if (!xtransLocalClient(client)) + return FALSE; + + /* If the executable name is "ssh", assume that this client connection + * is forwarded from another host via SSH + */ + if (cmdname) { + char **cmd; + Bool ret; + + /* Cut off any colon and whatever comes after it, see + * https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html + */ + cmd = xstrtokenize(cmdname, ":"); + +#if !defined(WIN32) || defined(__CYGWIN__) + cmd[0] = basename(cmd[0]); +#endif + + ret = strcmp(cmd[0], "ssh") != 0; + free(cmd); + + return ret; + } + + return TRUE; +} + /* * Return the uid and all gids of a connected local client * Allocates a LocalClientCredRec - caller must call FreeLocalClientCreds commit aebfc6ad9be5bd33b7e0a813d424c81d6214ab07 Author: Michel Dänzer <[email protected]> Date: Fri Jul 1 12:34:20 2016 +0900 glamor: Translate solid text background region after clipping Fixes incorrect clipping for redirected windows which don't happen to be located at the top left corner of the screen. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96742 Signed-off-by: Michel Dänzer <[email protected]> Reviewed-by: Adam Jackson <[email protected]> (cherry picked from commit e8e36755abb17872d669b88d33ca9adc511029a0) diff --git a/glamor/glamor_text.c b/glamor/glamor_text.c index c305305..cf165ca 100644 --- a/glamor/glamor_text.c +++ b/glamor/glamor_text.c @@ -446,16 +446,17 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc, glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y); if (width >= 0) { - box.x1 = off_x + drawable->x + x; - box.x2 = off_x + drawable->x + x + width; + box.x1 = drawable->x + x; + box.x2 = drawable->x + x + width; } else { - box.x1 = off_x + drawable->x + x + width; - box.x2 = off_x + drawable->x + x; + box.x1 = drawable->x + x + width; + box.x2 = drawable->x + x; } - box.y1 = off_y + drawable->y + y - gc->font->info.fontAscent; - box.y2 = off_y + drawable->y + y + gc->font->info.fontDescent; + box.y1 = drawable->y + y - gc->font->info.fontAscent; + box.y2 = drawable->y + y + gc->font->info.fontDescent; RegionInit(®ion, &box, 1); RegionIntersect(®ion, ®ion, gc->pCompositeClip); + RegionTranslate(®ion, off_x, off_y); glamor_solid_boxes(pixmap, RegionRects(®ion), RegionNumRects(®ion), gc->bgPixel); RegionUninit(®ion); } commit 7a08d8d82007367a90197f9e9d549dbf0bc9ca2e Author: Adam Jackson <[email protected]> Date: Tue Jul 12 10:04:18 2016 -0400 xfree86: Fix fallback driver sort order for Xorg -configure (v2) The intent here was that fallback drivers would be at the end of the list in order, but if a fallback driver happened to be at the end of the list already that's not what would happen. Rather than open-code something smarter, just use qsort. Note that qsort puts things in ascending order, so somewhat backwardsly fallbacks are greater than native drivers, and vesa is greater than modesetting. v2: Use strcmp to compare non-fallback drivers so we get a predictable result if your libc's qsort isn't stable (Keith Packard) Reviewed-by: Keith Packard <[email protected]> Signed-off-by: Adam Jackson <[email protected]> (cherry picked from commit 32a9504c69183485b0b796fa3966cd1e39992365) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 07f8fb4..26591c6 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -518,33 +518,54 @@ xf86InputDriverlistFromConfig(void) return modulearray; } +static int +is_fallback(const char *s) +{ + /* later entries are less preferred */ + const char *fallback[5] = { "modesetting", "fbdev", "vesa", "wsfb", NULL }; + int i; + + for (i = 0; fallback[i]; i++) + if (strstr(s, fallback[i])) + return i; + + return -1; +} + +static int +driver_sort(const void *_l, const void *_r) +{ + const char *l = *(const char **)_l; + const char *r = *(const char **)_r; + int left = is_fallback(l); + int right = is_fallback(r); + + /* neither is a fallback, asciibetize */ + if (left == -1 && right == -1) + return strcmp(l, r); + + /* left is a fallback */ + if (left >= 0) + return 1; + + /* right is a fallback */ + if (right >= 0) + return -1; + + /* both are fallbacks, which is worse */ + return left - right; +} + static void fixup_video_driver_list(const char **drivers) { - static const char *fallback[5] = { "modesetting", "fbdev", "vesa", "wsfb", NULL }; - const char **end, **drv; - const char *x; - int i; + const char **end; /* walk to the end of the list */ for (end = drivers; *end && **end; end++); end--; - /* - * for each of the fallback drivers, if we find it in the list, - * swap it with the last available non-fallback driver. - */ - for (i = 0; fallback[i]; i++) { - for (drv = drivers; drv != end; drv++) { - if (strstr(*drv, fallback[i])) { - x = *drv; - *drv = *end; - *end = x; - end--; - break; - } - } - } + qsort(drivers, end - drivers, sizeof(const char *), driver_sort); } static const char ** commit 8ff830d1ea4c3572b8fb770009c73c40007e132a Author: Andrew Eikum <[email protected]> Date: Wed Jul 6 14:13:09 2016 -0500 shm: Also censor images returned by ShmGetImage We currently censor images from dix's GetImage, but not from ShmGetImage. This is a method to bypass XACE, creating a potential leak. We should censor in both methods. Reviewed-by: Adam Jackson <[email protected]> Signed-off-by: Andrew Eikum <[email protected]> (cherry picked from commit 4926845a57fa8b53e18ea7d3434bf5539e9b7782) diff --git a/Xext/shm.c b/Xext/shm.c index b359a90..2a3448d 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -619,6 +619,7 @@ ProcShmGetImage(ClientPtr client) xShmGetImageReply xgi; ShmDescPtr shmdesc; VisualID visual = None; + RegionPtr pVisibleRegion = NULL; int rc; REQUEST(xShmGetImageReq); @@ -650,6 +651,9 @@ ProcShmGetImage(ClientPtr client) wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height) return BadMatch; visual = wVisual(((WindowPtr) pDraw)); + pVisibleRegion = NotClippedByChildren((WindowPtr) pDraw); + if (pVisibleRegion) + RegionTranslate(pVisibleRegion, -pDraw->x, -pDraw->y); } else { if (stuff->x < 0 || @@ -686,6 +690,11 @@ ProcShmGetImage(ClientPtr client) stuff->width, stuff->height, stuff->format, stuff->planeMask, shmdesc->addr + stuff->offset); + if (pVisibleRegion) + XaceCensorImage(client, pVisibleRegion, + PixmapBytePad(stuff->width, pDraw->depth), pDraw, + stuff->x, stuff->y, stuff->width, stuff->height, + stuff->format, shmdesc->addr + stuff->offset); } else { @@ -697,11 +706,19 @@ ProcShmGetImage(ClientPtr client) stuff->width, stuff->height, stuff->format, plane, shmdesc->addr + length); + if (pVisibleRegion) + XaceCensorImage(client, pVisibleRegion, + BitmapBytePad(stuff->width), pDraw, + stuff->x, stuff->y, stuff->width, stuff->height, + stuff->format, shmdesc->addr + length); length += lenPer; } } } + if (pVisibleRegion) + RegionDestroy(pVisibleRegion); + if (client->swapped) { swaps(&xgi.sequenceNumber); swapl(&xgi.length); commit d4cbb1155a79a3dc1dc74cc155dbcfc303273856 Author: Rui Matos <[email protected]> Date: Wed Jul 13 19:19:09 2016 +0200 xwayland: Update RR state on wl_output.done instead of wl_output.mode Otherwise if the geometry changes but the mode doesn't we end up with the previous geometry from RR's point of view. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=768710 Reviewed-by: Jonas Ådahl <[email protected]> Signed-off-by: Rui Matos <[email protected]> (cherry picked from commit cf6730c503f8090a5d1b80918fe253fc2c5bc090) diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c index 4903062..b66da13 100644 --- a/hw/xwayland/xwayland-output.c +++ b/hw/xwayland/xwayland-output.c @@ -98,7 +98,6 @@ output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags, int width, int height, int refresh) { struct xwl_output *xwl_output = data; - RRModePtr randr_mode; if (!(flags & WL_OUTPUT_MODE_CURRENT)) return; @@ -111,13 +110,7 @@ output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags, xwl_output->height = width; } - randr_mode = xwayland_cvt(width, height, refresh / 1000.0, 0, 0); - - RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1); - - RRCrtcNotify(xwl_output->randr_crtc, randr_mode, - xwl_output->x, xwl_output->y, - xwl_output->rotation, NULL, 1, &xwl_output->randr_output); + xwl_output->refresh = refresh; } static inline void @@ -198,6 +191,14 @@ output_handle_done(void *data, struct wl_output *wl_output) struct xwl_output *it, *xwl_output = data; struct xwl_screen *xwl_screen = xwl_output->xwl_screen; int width = 0, height = 0, has_this_output = 0; + RRModePtr randr_mode; + + randr_mode = xwayland_cvt(xwl_output->width, xwl_output->height, + xwl_output->refresh / 1000.0, 0, 0); + RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1); + RRCrtcNotify(xwl_output->randr_crtc, randr_mode, + xwl_output->x, xwl_output->y, + xwl_output->rotation, NULL, 1, &xwl_output->randr_output); xorg_list_for_each_entry(it, &xwl_screen->output_list, link) { /* output done event is sent even when some property

