Accepting request 597422 from home:michalsrb:branches:bnc1079607:X11:XOrg

- U_glx-Do-not-call-into-Composite-if-it-is-disabled.patch
  * Fixes crash when GLX is enabled and Composite disabled.
    (bnc#1079607)

OBS-URL: https://build.opensuse.org/request/show/597422
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=700
This commit is contained in:
Stefan Dirsch 2018-04-18 09:56:20 +00:00 committed by Git OBS Bridge
parent da350d9e81
commit ceb47b7572
3 changed files with 184 additions and 0 deletions

View File

@ -0,0 +1,173 @@
Git-commit: 1326ee0bc5eb858c3c00847b3ba65134e4ca2e2d
Patch-mainline: Upstream
Author: Michal Srb <msrb@suse.com>
Subject: glx: Do not call into Composite if it is disabled.
References: bnc#1079607 fdo#104993
Otherwise X server crashes if GLX is enabled and Composite disabled. For
example the compIsAlternateVisual function will try to lookup CompScreenPtr
using the CompScreenPrivateKey, but that was never initialized if Composite is
disabled.
Fixes: f84e59a4f4. ("glx: Duplicate relevant fbconfigs for compositing visuals")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104993
Signed-off-by: Michal Srb <msrb@suse.com>
---
glx/glxdricommon.c | 63 +++++++++++++++++++++++++++++-------------------------
glx/glxscreens.c | 33 +++++++++++++++++-----------
2 files changed, 55 insertions(+), 41 deletions(-)
Index: xorg-server-1.19.6/glx/glxdricommon.c
===================================================================
--- xorg-server-1.19.6.orig/glx/glxdricommon.c
+++ xorg-server-1.19.6/glx/glxdricommon.c
@@ -35,6 +35,7 @@
#include <GL/glxtokens.h>
#include <GL/internal/dri_interface.h>
#include <os.h>
+#include "extinit.h"
#include "glxserver.h"
#include "glxext.h"
#include "glxcontext.h"
@@ -206,25 +207,27 @@ createModeFromConfig(const __DRIcoreExte
config->config.yInverted = GL_TRUE;
#ifdef COMPOSITE
- /*
- * Here we decide what fbconfigs will be duplicated for compositing.
- * fgbconfigs marked with duplicatedForConf will be reserved for
- * compositing visuals.
- * It might look strange to do this decision this late when translation
- * from a __DRIConfig is already done, but using the __DRIConfig
- * accessor function becomes worse both with respect to code complexity
- * and CPU usage.
- */
- if (duplicateForComp &&
- (render_type_is_pbuffer_only(renderType) ||
- config->config.rgbBits != 32 ||
- config->config.visualRating != GLX_NONE ||
- config->config.sampleBuffers != 0)) {
- free(config);
- return NULL;
- }
+ if (!noCompositeExtension) {
+ /*
+ * Here we decide what fbconfigs will be duplicated for compositing.
+ * fgbconfigs marked with duplicatedForConf will be reserved for
+ * compositing visuals.
+ * It might look strange to do this decision this late when translation
+ * from a __DRIConfig is already done, but using the __DRIConfig
+ * accessor function becomes worse both with respect to code complexity
+ * and CPU usage.
+ */
+ if (duplicateForComp &&
+ (render_type_is_pbuffer_only(renderType) ||
+ config->config.rgbBits != 32 ||
+ config->config.visualRating != GLX_NONE ||
+ config->config.sampleBuffers != 0)) {
+ free(config);
+ return NULL;
+ }
- config->config.duplicatedForComp = duplicateForComp;
+ config->config.duplicatedForComp = duplicateForComp;
+ }
#endif
return &config->config;
@@ -258,14 +261,16 @@ glxConvertConfigs(const __DRIcoreExtensi
}
#ifdef COMPOSITE
- /* Duplicate fbconfigs for use with compositing visuals */
- for (i = 0; configs[i]; i++) {
- tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR,
- GL_TRUE);
- if (tail->next == NULL)
- continue;
+ if (!noCompositeExtension) {
+ /* Duplicate fbconfigs for use with compositing visuals */
+ for (i = 0; configs[i]; i++) {
+ tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR,
+ GL_TRUE);
+ if (tail->next == NULL)
+ continue;
- tail = tail->next;
+ tail = tail->next;
+ }
}
#endif
Index: xorg-server-1.19.6/glx/glxscreens.c
===================================================================
--- xorg-server-1.19.6.orig/glx/glxscreens.c
+++ xorg-server-1.19.6/glx/glxscreens.c
@@ -38,6 +38,7 @@
#include <os.h>
#include <colormapst.h>
+#include "extinit.h"
#include "privates.h"
#include "glxserver.h"
#include "glxutil.h"
@@ -279,10 +280,12 @@ pickFBConfig(__GLXscreen * pGlxScreen, V
if (config->visualID != 0)
continue;
#ifdef COMPOSITE
- /* Use only duplicated configs for compIsAlternateVisuals */
- if (!!compIsAlternateVisual(pGlxScreen->pScreen, visual->vid) !=
- !!config->duplicatedForComp)
- continue;
+ if (!noCompositeExtension) {
+ /* Use only duplicated configs for compIsAlternateVisuals */
+ if (!!compIsAlternateVisual(pGlxScreen->pScreen, visual->vid) !=
+ !!config->duplicatedForComp)
+ continue;
+ }
#endif
/*
* If possible, use the same swapmethod for all built-in visual
@@ -352,8 +355,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen
pGlxScreen->visuals[pGlxScreen->numVisuals++] = config;
config->visualID = visual->vid;
#ifdef COMPOSITE
- if (compIsAlternateVisual(pScreen, visual->vid))
- config->visualSelectGroup++;
+ if (!noCompositeExtension) {
+ if (compIsAlternateVisual(pScreen, visual->vid))
+ config->visualSelectGroup++;
+ }
#endif
}
}
@@ -375,10 +380,12 @@ __glXScreenInit(__GLXscreen * pGlxScreen
*/
depth = config->redBits + config->greenBits + config->blueBits;
#ifdef COMPOSITE
- if (config->duplicatedForComp) {
- depth += config->alphaBits;
- config->visualSelectGroup++;
- }
+ if (!noCompositeExtension) {
+ if (config->duplicatedForComp) {
+ depth += config->alphaBits;
+ config->visualSelectGroup++;
+ }
+ }
#endif
/* Make sure that our FBconfig's depth can actually be displayed
* (corresponds to an existing visual).
@@ -403,8 +410,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen
continue;
#ifdef COMPOSITE
- if (config->duplicatedForComp)
- (void) CompositeRegisterAlternateVisuals(pScreen, &visual->vid, 1);
+ if (!noCompositeExtension) {
+ if (config->duplicatedForComp)
+ (void) CompositeRegisterAlternateVisuals(pScreen, &visual->vid, 1);
+ }
#endif
pGlxScreen->visuals[pGlxScreen->numVisuals++] = config;
initGlxVisual(visual, config);

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
Tue Apr 17 10:30:46 UTC 2018 - msrb@suse.com
- U_glx-Do-not-call-into-Composite-if-it-is-disabled.patch
* Fixes crash when GLX is enabled and Composite disabled.
(bnc#1079607)
-------------------------------------------------------------------
Mon Apr 16 08:10:50 UTC 2018 - msrb@suse.com

View File

@ -236,6 +236,8 @@ Patch1400: U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch
Patch1401: u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch
Patch1402: n_add-dummy-xf86DisableRandR.patch
Patch1500: U_glx-Do-not-call-into-Composite-if-it-is-disabled.patch
%description
This package contains the X.Org Server.
@ -389,6 +391,8 @@ sh %{SOURCE92} --verify . %{SOURCE91}
%patch1401 -p1
%patch1402 -p1
%patch1500 -p1
%build
test -e source-file-list || \
find -L . -type f \! -name '*.orig' \! -path ./source-file-list > \