xserver/glx
Nathan Kidd 7ca8b37ab1 glx: Don't blindly write 8 bytes in GLX single replies
Previously we leaked stack when invalid enum parameters were
specified and caused __glGet*_size functions to return a 0 size.

Further, we read out-of-bounds (and leaked) when the input data was less
than 8 bytes (__glXDispSwap_GetFramebufferAttachmentParameteriv and
__glXDisp_GetRenderbufferParameteriv).

Now we only write a single element in the reply padding, and only when there
is a single element. This is what the Mesa client-side libGL expects, and
restores original GLX server behaviour, matching both pre-public (1996) SGI GLX
and XFree86 4.

The main risk of this change is if we have any error in element count or size;
previously it may not have mattered but now it does.

There are no piglit result changes from this modification using either mesa
libGLX or NVIDIA libGLX.

For performance considerations, an extra conditional and variable-length
memcpy has no meaningful impact on the indirect rendering pipeline cost.

There is still the possiblity to leak if our size checks allow an enum that
the GL implemention does not. Guarding against that requires zero-initializing
all temp storage, which wants re-evaluation of the blind 200-byte buffers
used for many calls and thus is a much bigger change.

Signed-off-by: Nathan Kidd <nkidd@rocketsoftware.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1647>
2025-07-03 16:43:18 +02:00
..
clientinfo.c glx: use sizeof() for reply struct 2025-02-06 20:04:23 +00:00
createcontext.c glx: createcontext: silence analyzer warning and make code easier to understand 2025-06-12 16:33:12 +02:00
extension_string.c glx: fix missing include of dix-config.h 2025-06-12 16:50:30 +02:00
extension_string.h glx: Implement GLX_EXT_get_drawable_type 2020-09-28 17:16:24 +00:00
glxcmds.c dix: add dixClientForXID() 2025-06-12 16:53:34 +02:00
glxcmdsswap.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
glxcontext.h GLX: fix context render type queries 2020-11-26 20:07:55 +00:00
glxdrawable.h Add Windows-DRI extension 2016-09-15 20:10:29 +01:00
glxdri2.c os: log: replace LogMessageVerbSigSafe() by LogMessageVerb() 2025-02-06 23:35:27 +00:00
glxdricommon.c miext: move over extinit_priv.h from include 2025-06-12 17:21:46 +02:00
glxdricommon.h glx: remove unused systemTimeExtension 2017-09-08 11:23:35 -07:00
glxdriswrast.c drop remains of cygwin support 2025-06-12 17:21:46 +02:00
glxext.c treewide: clean up remaining consumers of extinit.h 2025-06-12 17:21:46 +02:00
glxext.h glx: Fix GLX_CONTEXT_RELEASE_BEHAVIOR_ARB handling 2019-05-01 14:38:09 +00:00
glxscreens.c dix: add dixAllocServerXID() 2025-06-12 17:21:48 +02:00
glxscreens.h treewide: drop COMPOSITE symbol 2025-06-12 16:47:01 +02:00
glxserver.h glx: Enable GLX_ARB_create_context_no_error (v2) 2018-02-26 10:18:58 -05:00
glxutil.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
indirect_dispatch.c glx: drop obsolete warnings on files being generated 2025-02-06 14:29:54 +00:00
indirect_dispatch.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
indirect_dispatch_swap.c glx: drop obsolete warnings on files being generated 2025-02-06 14:29:54 +00:00
indirect_program.c glx: drop obsolete glxbyteorder.h 2025-02-06 14:29:54 +00:00
indirect_reqsize.c drop remains of cygwin support 2025-06-12 17:21:46 +02:00
indirect_reqsize.h drop remains of support for old Sun compilers 2024-02-19 09:21:36 +00:00
indirect_size.h drop remains of cygwin support 2025-06-12 17:21:46 +02:00
indirect_size_get.c drop remains of cygwin support 2025-06-12 17:21:46 +02:00
indirect_size_get.h drop remains of cygwin support 2025-06-12 17:21:46 +02:00
indirect_table.c glx: drop autogen marker from indirect_table.c 2025-06-12 16:50:27 +02:00
indirect_table.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
indirect_texture_compression.c glx: drop obsolete glxbyteorder.h 2025-02-06 14:29:54 +00:00
indirect_util.c glx: Don't blindly write 8 bytes in GLX single replies 2025-07-03 16:43:18 +02:00
indirect_util.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
meson.build treewide: remove "lib" prefix in static_library names (meson) 2025-07-03 12:01:52 +02:00
render2.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
render2swap.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
renderpix.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
renderpixswap.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
rensize.c glx: fix correct sizeof GL unsigned int 2025-06-23 16:18:47 +02:00
single2.c glx: use calloc() instead of malloc() 2025-06-12 16:49:22 +02:00
single2swap.c glx: use sizeof() for reply struct 2025-02-06 20:04:23 +00:00
singlepix.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
singlepixswap.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
singlesize.c glx: Fix out-of-bounds reads from negative return 2025-07-03 16:43:18 +02:00
singlesize.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
swap_interval.c glx: drop obsolete glxbyteorder.h 2025-02-06 14:29:54 +00:00
unpack.h glx: use sizeof() for reply struct 2025-02-06 20:04:23 +00:00
vnd_dispatch_stubs.c dix: make LEGAL_NEW_RESOURCE() macro private 2025-06-12 17:21:43 +02:00
vndcmds.c glx: use calloc() instead of malloc() 2025-06-12 16:49:22 +02:00
vndext.c miext: move over extinit_priv.h from include 2025-06-12 17:21:46 +02:00
vndserver.h glx: move private definitions from vndserver.h to vndserver_priv.h 2024-02-22 23:52:03 +00:00
vndserver_priv.h glx: move private definitions from vndserver.h to vndserver_priv.h 2024-02-22 23:52:03 +00:00
vndservermapping.c glx: fix missing include of dix-config.h 2025-06-12 16:50:30 +02:00
vndservervendor.c glx: fix missing include of dix-config.h 2025-06-12 16:50:30 +02:00
vndservervendor.h glx: Import glxvnd server module (v2) 2018-02-14 17:04:35 -05:00
xfont.c glx: use calloc() instead of malloc() 2025-06-12 16:49:22 +02:00