glx: check for indirect context in CreateContextAttribsARB()
Commit99f0365b"Add a command line argument for disabling indirect GLX" added a test to check if indirect context are enabled in `DoCreateContext()` but `__glXDisp_CreateContextAttribsARB()` doesn't use `DoCreateContext()` and doesn't check if indirect context is enabled. As a result, clients can still manage to create indirect contexts using `glXCreateContextAttribsARB()` even if indirect contexts are disabled, which can possibly crash Xservers such as Xwayland or Xephyr when the context is destroyed. To avoid the issue, check for `enableIndirectGLX` in `__glXDisp_CreateContextAttribsARB()` as well. Fixes:99f0365b"Add a command line argument for disabling indirect GLX" Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107508 Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
This commit is contained in:
		
							parent
							
								
									ce271535ad
								
							
						
					
					
						commit
						75448671ab
					
				|  | @ -28,6 +28,7 @@ | |||
| #include "glxserver.h" | ||||
| #include "glxext.h" | ||||
| #include "indirect_dispatch.h" | ||||
| #include "opaque.h" | ||||
| 
 | ||||
| #define ALL_VALID_FLAGS \ | ||||
|     (GLX_CONTEXT_DEBUG_BIT_ARB | GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB \ | ||||
|  | @ -320,6 +321,17 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc) | |||
|         err = BadAlloc; | ||||
|     } | ||||
|     else { | ||||
|         /* Only allow creating indirect GLX contexts if allowed by
 | ||||
|          * server command line.  Indirect GLX is of limited use (since | ||||
|          * it's only GL 1.4), it's slower than direct contexts, and | ||||
|          * it's a massive attack surface for buffer overflow type | ||||
|          * errors. | ||||
|          */ | ||||
|         if (!enableIndirectGLX) { | ||||
|             client->errorValue = req->isDirect; | ||||
|             return BadValue; | ||||
|         } | ||||
| 
 | ||||
|         ctx = glxScreen->createContext(glxScreen, config, shareCtx, | ||||
|                                        req->numAttribs, (uint32_t *) attribs, | ||||
|                                        &err); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue