Commit graph

17981 commits

Author SHA1 Message Date
Alan Coopersmith
9848e11d7c panoramix: avoid null dereference in PanoramiXConsolidate()
Reported in #1817:

Error: GCC_ANALYZER_WARNING (CWE-476): [#def5]
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:820:5: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘root’
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:819:12: acquire_memory: this call could return NULL
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:820:5: danger: ‘root’ could be NULL: unchecked value from (1)
818|
819|       root = malloc(sizeof(PanoramiXRes));
820|->     root->type = XRT_WINDOW;
821|       defmap = malloc(sizeof(PanoramiXRes));
822|       defmap->type = XRT_COLORMAP;
Error: GCC_ANALYZER_WARNING (CWE-476): [#def6]

xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:822:5: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘defmap’
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:821:14: acquire_memory: this call could return NULL
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:822:5: danger: ‘defmap’ could be NULL: unchecked value from (1)
820|       root->type = XRT_WINDOW;
821|       defmap = malloc(sizeof(PanoramiXRes));
822|->     defmap->type = XRT_COLORMAP;
823|       saver = malloc(sizeof(PanoramiXRes));
824|       saver->type = XRT_WINDOW;

Error: GCC_ANALYZER_WARNING (CWE-476): [#def7]
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:824:5: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘saver’
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:823:13: acquire_memory: this call could return NULL
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:824:5: danger: ‘saver’ could be NULL: unchecked value from (1)
822|       defmap->type = XRT_COLORMAP;
823|       saver = malloc(sizeof(PanoramiXRes));
824|->     saver->type = XRT_WINDOW;
825|
826|       FOR_NSCREENS(i) {

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
(cherry picked from commit 23c103d41f)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2077>
2025-10-08 17:54:33 +02:00
Alan Coopersmith
63d6cbf24c panoramix: avoid null dereference in PanoramiXMaybeAddDepth()
Reported in #1817:

Error: GCC_ANALYZER_WARNING (CWE-476): [#def4]
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:748:5: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘PanoramiXDepths’
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:802:1: enter_function: entry to ‘PanoramiXConsolidate’
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:813:17: branch_true: following ‘true’ branch...
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:814:9: branch_true: ...to here
xwayland-24.1.6/redhat-linux-build/../Xext/panoramiX.c:814:9: call_function: calling ‘PanoramiXMaybeAddDepth’ from ‘PanoramiXConsolidate’
746|       PanoramiXDepths = reallocarray(PanoramiXDepths,
747|                                      PanoramiXNumDepths, sizeof(DepthRec));
748|->     PanoramiXDepths[j].depth = pDepth->depth;
749|       PanoramiXDepths[j].numVids = 0;
750|       PanoramiXDepths[j].vids = NULL;

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
(cherry picked from commit 537b56ccca)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2077>
2025-10-08 17:54:33 +02:00
Mikhail Dmitrichenko
e052acfa33 dix: avoid null ptr deref at doListFontsWithInfo
In the doListFontsWithInfo function in dixfonts.c, when a font alias is
encountered (err == FontNameAlias), the code saves the current state
and allocates memory for c->savedName.

If the malloc(namelen + 1) call fails, c->savedName remains NULL,
but c->haveSaved is still set to TRUE. Later, when a font is
successfully resolved (err == Successful), the code uses c->savedName
without checking if it is NULL, so there is potential null ptr
dereference. XNFalloc will check result of malloc and stop
program execution if allocation was failed.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1842
Signed-off-by: Mikhail Dmitrichenko <m.dmitrichenko222@gmail.com>
(cherry picked from commit dd5c2595a4)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2077>
2025-10-08 17:54:33 +02:00
Mikhail Dmitrichenko
c49bf5f7fd os: avoid potential out-of-bounds access at logVHdrMessageVerb
The LogVHdrMessageVerb function may access an array out of bounds in a
specific edge case. Specifically, the line:

newline = (buf[len - 1] == '\n');

can result in accessing buf[-1] if len == 0, which is undefined behavior.

Commit adds check to avoid access out of bounds at pointed line.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1841
Signed-off-by: Mikhail Dmitrichenko <m.dmitrichenko222@gmail.com>
(cherry picked from commit 8d25a89143)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2077>
2025-10-08 17:54:33 +02:00
Icenowy Zheng
b53d9fa417 glamor: Fix dual blend on GLES3
The EXT_blend_func_extended extension on ESSL always requires explicit
request to allow two FS out variables because of limitations of the ESSL
language, which is mentioned as the No.6 issue of the extension's
specification.

Fix this by adding the extension request.

The original behavior on GLES3 is slightly against the specification of
GL_EXT_blend_func_extended extension, however Mesa and older version of
PowerVR closed drivers will just ignore this issue. Newest PowerVR
closed driver will bail out on this problem, so it deems a fix now.

Fixes: ee107cd491 ("glamor: support GLES3 shaders")
Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
(cherry picked from commit eba15f1ba7)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Pierre-Eric Pelloux-Prayer
b89a563882 glamor: reject configs using unsupported rgbBits size
The supported color depths is a hardcoded list for now, so we
need to honor the value exposed there otherwise we'll get
inconsistencies between what glXGetFBConfigs and XListDepths
report to applications.

Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
(cherry picked from commit 5397854877)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Pierre-Eric Pelloux-Prayer
339edca178 glamor: use gbm_format_for_depth instead of open-coding it
This way glamor_back_pixmap_from_fd deals with the same depth
values as glamor_pixmap_from_fds.

Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
(cherry picked from commit 83b13387ab)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Pierre-Eric Pelloux-Prayer
4f6f1813b6 glamor: return the result of gbm_format_for_depth
This way the caller knows if the conversion failed.
While at it, check for width/height at the same time.

Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
(cherry picked from commit 87afcc7699)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Michel Dänzer
33a9f47205 xwayland/glamor: Handle depth 15 in gbm_format_for_depth
Prevents Xwayland with glamor from logging

 unexpected depth: 15

to stderr many times when running

 rendercheck -t blend -o clear

(cherry picked from commit 08113b8923)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Balló György
d4cf52524d glamor: Fallback to software rendering on GLSL link failure
Instead of thowing fatal error on GLSL link failure, fall back to software
rendering. This allows using Glamor on systems with limited hardware resources
(such as i915).

(cherry picked from commit 007e98b186)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
3837159a3f Fix autotools build for Glamor GLX provider
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Nicolas Dufresne
0dfcd13668 glamor: xv: Rewrite UYVY shader to match NV12/I420 CSC
This rewrites the shader so that we use the same (more flexible) CSC as
we have for I420 and NV12. This also fixes the reverse of odd/even which
caused chroma shift.

Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
(cherry picked from commit 39c8a6f367)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
b21b504c4e glamor: xv: fix UYVY alignment
UYVY videos should be aligned by 2 to avoid breakups in the shader

Fixes: 832b392f7 - glamor: xv: enable UYVY acceleration
Suggested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit eb26f32368)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
378f14f9ce glamor: check BPP by render_format.
Check actual BPP by render_format in upload_boxes, not by drawable BPP.

It is required when we used different BPP formats for storing and
rendering (for example, in the case of UYVY).

The problem of UYVY size lies inside method of glamor downloading boxes.

When we set GLAMOR_CREATE_FORMAT_CBCR, it actually uses 16-bit GL and
Pixman formats, but before this change in glamor_download_boxes, that
function deduces GL and Pixman formats from BPP, which is wrong in this
case (will be deduced to 32).

When GL and Pixman format BPP is identical to drawable BPP, this change
does nothing, but when it is different - it will prioritize Pixman
format, not the format deduced from BPP.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1730
Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>
(cherry picked from commit 75f56b7923)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Yuriy Vasilev
48cb710f9f glamor: xv: add rgb565
This commit adds RGB565 format to XVideo with reuse of RGBA32 shader

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Yuriy Vasilev <uuvasiliev@yandex.ru>
(cherry picked from commit c170056111)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Yuriy Vasilev
b6d21a444e glamor: xv: add rgba32 format
This commit adds RGBA32 format to XVideo along with shader for handling it.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Yuriy Vasilev <uuvasiliev@yandex.ru>
(cherry picked from commit 15412e78c8)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
e084b6e806 glamor: xv: enable UYVY acceleration
This commit adds UYVY format in XVideo for Glamor
along with shader support.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit 832b392f70)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
966f8aa40e glamor: xv: prepare to one-plane formats
As a preparation to one-plane formats (for example, UYVY), second
texture definition is moved inside a format switch, and all allocations
now also done inside a texture switch.
No functional change.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit ffd7151b10)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
20f8f90d53 glamor: xv: reuse ports and shaders when possible
Xv currently calls glamor_xv_free_port_data at the end of every putImage.
This leads to shader recompilation for every frame, which is a huge performance loss.
This commit changes behaviour of glamor_xv_free_port_data, and its now is called only
if width, height or format is changed for xv port.

Shader management also done in a port now, because if shaders will be
stored in core glamor and try to be reused, this can lead to a bug if we
try to play 2 videos with different formats simultaneously.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit 81ef43dd4a)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
111c1d0332 glamor: xv: do not force a version on XV shaders
There is a no need to force a low version for XV shaders, it will
work on higher version too.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit a8270fc5f0)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
062d399770 glamor_egl: add support of GlxVendorLibrary option
Same semantics as in glxdri2.c, and same purpose.

Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit a449bb4c5d)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin Pugin
0a1ee643b2 xorg: initialize glamor provider
This allows Xorg to use Glamor GLX when Glamor is requested,
and eliminates usage of DRI2 in case of Glamor.

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit a987fc7c36)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Adam Jackson
ed1ec13502 glamor: Lift the GLX EGL backend from Xwayland
This code is almost entirely ddx-agnostic already, and I'd like to use
it from the other EGL glamor consumers. Which, right now that's just
Xorg, but soon it'll be Xephyr too.

(cherry picked from commit 58b88ba0b1)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin Pugin
a6145198bc glamor: add glvnd_vendor private
This commit adds an ability to store a glvnd vendor in Glamor
structures, which can be used for initialize some vendor-based values
without hooking into DDX internals. Also this adds setting this value
into Xorg and Xwayland

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit 3caf7aa88d)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
93abc39fcd glamor_egl: add info message about context API
It is useful to know on what context we are running, and
we need to show it into xorg.log

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit c014f33b43)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
98ac366741 xorg.conf.man: document new RenderingAPI option
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit 4fc1500f74)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
2f65941589 glamor_egl: add RenderingAPI option
This allows to choose between Glamor on OpenGL and Glamor on OpenGL ES
via an option.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit a44a4b0d4d)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
e4f79ed0ad glamor_egl: add helper functions for contexts
This is just a split big glamor_egl_init to 3 smaller functions.
No functional change.

Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit d5c2a4d3f5)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Balló György
40af9f2d1a glamor: Don't require EXT_gpu_shader4 unconditionally
It causes a shader compilation error on systems without EXT_gpu_shader4.

Fixes: ee107cd4
(cherry picked from commit 910847f452)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin Pugin
7fda68174b glamor: support GLES3 shaders
Some hardware (preferably mobile) working on GLES3 way faster than
on desktop GL and supports more features. This commit will allow using
GLES3 if glamor is running over GL ES, and version 3 is supported.

Changes are the following:
1. Add compatibility layer for 120/GLES2 shaders with defines in and out
2. Switch attribute and varying to in and out in almost all shaders
   (aside gradient)
3. Add newGL-only frag_color variable, which defines as gl_FragColor on
   old pipelines
4. Switch all shaders to use frag_color.
5. Previous commit is reverted, because now we have more than one GL ES
version, previous commit used to set version 100 for all ES shaders, which
is not true for ES 3

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>
(cherry picked from commit ee107cd491)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin Pugin
97d5271487 glamor: accelerate incomplete textures for GL ES
If texture can be uploaded to GL using glTexImage2D normally, but
cannot be read back using glReadPixels, we still can accelerate it,
but we cannot create pixmap with FBO using this texture type. So,
add a flag to avoid such creations.

This allow us to accelerate 8-bit glyph masks on GL ES 2.0, because those
masks are used only as textures, and in next stages are rendered on RGBA
surfaces normally, so, we do not need to call glReadPixels on them.

This is needed for correctly working fonts on GL ES 2.0, due to inability
to use GL_RED and texture swizzle. We should use GL_ALPHA there, and
with this format we cannot have a complete framebuffer. But completed
framebuffer, according to testing, is not required for fonts anyway.
Also it fixes all 8-bit formats for GLES2.

Fixes #1362
Fixes #1411

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
Acked-by: Martin Roukala <martin.roukala@mupuf.org>
(cherry picked from commit e573d4ca03)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
6086a0210d glamor: add gl_PointSize for ES shaders
GLES3.2 spec, page 126:
> The variable gl_PointSize is intended for a shader to write
> the size of the point to be rasterized. It is measured in pixels.
> If gl_PointSize is not written to, its value
> is undefined in subsequent pipe stages.

If glamor shader is use points, we should define gl_PointSize for GLES.
On Desktop GL, it "just work" due to default gl_PointSize is 1.

As @anholt requested, define this only for minimal amount of shaders
(point and glyphbit ones), to make sure than performance will not
affected

Reviewed-by: Emma Anholt <emma@anholt.net>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Konstantin <ria.freelander@gmail.com>
(cherry picked from commit f273c960c1)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
3078e49257 glamor: fixes GL_INVALID_ENUM errors on ES if there is no quads
If there is no quads to draw, then we have a possibility to call
glDrawElements with type as zero, which will generate
GL_INVALID_ENUM error. While this error is harmless, it is annoying.

Signed-off-by: Konstantin <ria.freelander@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit baaddf47d5)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Dave Airlie
feb860014d glamor: handle EXT_gpu_shader4 in dual source blend paths
Fixes: a955286869 ("glamor: add EXT_gpu_shader4 support")
Acked-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit 86598739ba)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
e52e256f1c glamor: fix XVideo run with GLES
For now, it sets .version=120, which prevents shader from compiling on ES.
We just force version of shaders to be always 100 on ES, because we use
only 120 shaders on ES anyway, and all shaders works.

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit dcba460af3)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Vasily Khoruzhick
fc70125153 glamor: use dual source blend on GL 2.1 with ARB_ES2_compatibility
ARB_blend_func_extended may be exposed even without GLSL 1.30.
In order to use it we need GLES2 shaders that are available if
ARB_ES2_compatibility is exposed.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit 05b8401eeb)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Yuriy Vasilev
4b1d4cc963 glamor: fix CbCr format handling
In GLES2, we cannot do GL_RED or GL_RG without GL_EXT_texture_rg.
So, add check for GL_EXT_texture_rg to make it working. Also add
a yuv2 pixman format into render.h to make Xv yuv rendering works.

Signed-off-by: Yuriy Vasilev <uuvasiliev@yandex.ru>

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit 65392d27d7)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
f94d80b387 glamor: transpose gradients transparently
glUniformMatrix3fv is used with argument transpose set to GL_TRUE.
According to the Khronos OpenGL ES 2.0 pages transpose must be GL_FALSE.
Actually we can just return transformed matrix from
_glamor_gradient_convert_trans_matrix (@anholt suggest),
so @uvas workaround is not required

Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit a59531533f)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Konstantin
95b8991181 meson: add glamor gles2 tests
Signed-off-by: Konstantin Pugin <ria.freelander@gmail.com>

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
(cherry picked from commit ddcd4846d1)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Jeffy Chen
8d3b4fa245 glamor: xv: Fix invalid accessing of plane attributes for NV12
NV12 only has 2 planes.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
(cherry picked from commit 0076671e24)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Lucas Stach
bec42f6e0b glamor_egl: properly get FDs from multiplanar GBM BOs
Multiplanar GBM buffers can point to different objects from each plane.
Use the _for_plane API when possible to retrieve the correct prime FD
for each plane.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Simon Ser <contact@emersion.fr>
Tested-by: Guido Günther <agx@sigxcpu.org>
(cherry picked from commit e5b09f7a2c)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Lucas Stach
b621926610 glamor_egl: handle fd export failure in glamor_egl_fds_from_pixmap
Check the fd for validity before giving a success return code.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Simon Ser <contact@emersion.fr>
Tested-by: Guido Günther <agx@sigxcpu.org>
(cherry picked from commit 95944e2b99)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1636>
2025-06-30 17:13:16 +03:00
Olivier Fourdan
8b5ed211d5 .gitlab-ci: Use meson instead of ninja for running the tests
Using ninja spawns a very high number of concurrent tests (even with
the option '-j').

The CI runs two Xservers, one Xephyr instance running inside an Xvfb
instance.

As a result, running the tests may exhaust the CI server resources and
eventually the CI fails.

meson, however, doesn't seem to suffer the same issue, and the number of
Xserver spawned for the CI tests remains limited.

The master branch already uses meson (after commit ce2f24c51 which uses a
meson-build script instead).

Switch to meson instead of ninja for running the tests.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2040>
2025-06-30 11:29:21 +02:00
Olivier Fourdan
2403cd5352 xserver 21.1.18
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2029>
2025-06-18 17:55:42 +02:00
Olivier Fourdan
a659519ffa os: Check for integer overflow on BigRequest length
Check for another possible integer overflow once we get a complete xReq
with BigRequest.

Related to CVE-2025-49176

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Suggested-by: Peter Harris <pharris2@rocketsoftware.com>
(cherry picked from commit 4fc4d76b2c)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2029>
2025-06-18 17:54:47 +02:00
Olivier Fourdan
97f79ca01b xserver 21.1.17
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2025>
2025-06-17 15:06:57 +02:00
Olivier Fourdan
bb89548515 xfree86: Check for RandR provider functions
Changing XRandR provider properties if the driver has set no provider
function such as the modesetting driver will cause a NULL pointer
dereference and a crash of the Xorg server.

Related to CVE-2025-49180

This issue was discovered by Nils Emmerich <nemmerich@ernw.de> and
reported by Julian Suleder via ERNW Vulnerability Disclosure.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 0235121c6a)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2025>
2025-06-17 15:06:49 +02:00
Olivier Fourdan
7c626aa63a randr: Check for overflow in RRChangeProviderProperty()
A client might send a request causing an integer overflow when computing
the total size to allocate in RRChangeProviderProperty().

To avoid the issue, check that total length in bytes won't exceed the
maximum integer value.

CVE-2025-49180

This issue was discovered by Nils Emmerich <nemmerich@ernw.de> and
reported by Julian Suleder via ERNW Vulnerability Disclosure.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 3c3a4b767b)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2025>
2025-06-17 15:06:40 +02:00
Olivier Fourdan
8592cab682 record: Check for overflow in RecordSanityCheckRegisterClients()
The RecordSanityCheckRegisterClients() checks for the request length,
but does not check for integer overflow.

A client might send a very large value for either the number of clients
or the number of protocol ranges that will cause an integer overflow in
the request length computation, defeating the check for request length.

To avoid the issue, explicitly check the number of clients against the
limit of clients (which is much lower than an maximum integer value) and
the number of protocol ranges (multiplied by the record length) do not
exceed the maximum integer value.

This way, we ensure that the final computation for the request length
will not overflow the maximum integer limit.

CVE-2025-49179

This issue was discovered by Nils Emmerich <nemmerich@ernw.de> and
reported by Julian Suleder via ERNW Vulnerability Disclosure.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 2bde9ca49a)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2025>
2025-06-17 15:06:30 +02:00
Olivier Fourdan
7996ac60d8 os: Account for bytes to ignore when sharing input buffer
When reading requests from the clients, the input buffer might be shared
and used between different clients.

If a given client sends a full request with non-zero bytes to ignore,
the bytes to ignore may still be non-zero even though the request is
full, in which case the buffer could be shared with another client who's
request will not be processed because of those bytes to ignore, leading
to a possible hang of the other client request.

To avoid the issue, make sure we have zero bytes to ignore left in the
input request when sharing the input buffer with another client.

CVE-2025-49178

This issue was discovered by Nils Emmerich <nemmerich@ernw.de> and
reported by Julian Suleder via ERNW Vulnerability Disclosure.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit d55c54cecb)

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2025>
2025-06-17 15:06:20 +02:00