Commit Graph

18121 Commits

Author SHA1 Message Date
Lucas Stach 95944e2b99 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>
2022-10-28 12:38:20 +00:00
Lucas Stach 7d5ad2d372 xwayland: 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>
2022-10-28 12:38:20 +00:00
Lucas Stach 951502e497 xwayland: 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>
2022-10-28 12:38:20 +00:00
Olivier Fourdan 395c25f185 build: Bump wayland requirement to 1.18
Xwayland uses API such as wl_proxy_set_tag()/wl_proxy_get_tag() which
appeared in Wayland 1.18, but the build system still requires Wayland
1.5 at least.

Bump the Wayland version to match the requirements.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
2022-10-19 07:26:59 +00:00
Olivier Fourdan a1d14aa8c5 xwayland: Clear the "xwl-window" tag on unrealize
Now that we keep the Wayland surface around for longer than the
xwl_window, we might get events for that surface after the X11 window
is unrealized.

Make sure we untag the Wayland surface when the Wayland surface is
delayed, to break the wl_surface/xwl_window relationship, so that events
for that surface are discarded by Xwayland.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
Fixes: e37f18ee9 - xwayland: Delay wl_surface destruction
2022-10-19 07:26:59 +00:00
Demi Marie Obenour cb33e0d278 Forbid server grabs by non-WM on *rootless* XWayland
a77d95af61 intended to do this, but the
check for “is this rootless or rootful XWayland” was inverted.

Fixes: a77d95af61 ("xwayland: Prevent Xserver grabs with rootless")
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2022-10-19 07:13:30 +00:00
Jan Beich c9edd3d54a xwayland: add missing dependency on xwaylandproto
hw/xwayland/xwayland.c:306:10: fatal error: 'X11/extensions/xwaylandproto.h' file not found
 #include <X11/extensions/xwaylandproto.h>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fixes: 2700bc6045 ("xwayland: add support for the XWAYLAND extension")
2022-10-18 18:30:01 +00:00
Olivier Fourdan e37f18ee97 xwayland: Delay wl_surface destruction
X11 and Wayland requests are unordered, causing a race in the X11 window
and wl_surface association.

To mitigate that race, delay the wl_surface destruction by 1 second,
so that the compositor has time to establish the association before the
wl_surface is destroyed: to see both the wl_surface created and the
WL_SURFACE_ID X11 property set.

This is only a mitigation though, a more robust solution requires a
future dedicated Wayland protocol.

v2: Clean up pending wl_surface destroy on exit as well.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1157
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Suggested-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
Tested-by: Joshua Ashton <joshua@froggi.es>
Tested-by: Sterophonick <sterophonick@gmail.com>
See-also: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/163
2022-09-28 17:00:48 +02:00
Alan Coopersmith 01b8396d73 xf86AutoConfig: try modesetting on all platforms we build it on
Changes check for trying modesetting driver from if defined(__linux__)
to use meson check for if we built the driver for this platform.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-09-20 18:26:03 +00:00
Olivier Fourdan a77d95af61 xwayland: Prevent Xserver grabs with rootless
Because of the design of most Wayland compositors, where the compositor
is both a Wayland server and an X11 window manager, any X11 client
issuing a server grab (i.e. XGrabServer()) can possibly hang the whole
desktop when Xwayland is running rootless.

This can happen with e.g. ImageMagick's import command with mutter.

1. "import" is launched and issues an XServerGrab(),
2. Xwayland restricts access to that "import" X11 client alone,
3. mutter continues to process events until it needs to sync with
   Xwayland (there's variability in time before the hang occurs),
4. When mutter does an XSync() (explicitly or implicitly through some
   other Xlib call), it will stop waiting for Xwayland to reply,
5. Xwayland waits for the XServerGrab() to be released by import,
6. "import" waits for a user input to release the XServerGrab(),
7. mutter is stuck waiting on Xwayland and does not process input
   events...

To prevent this, re-route the GrabServer/UngrabServer requests and
pretend the grab works but actually does nothing at all for all clients
but the X11 window manager (which can still issue X11 server grabs, at
its own risks).

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Closes: https://bugzilla.redhat.com/1914021
2022-09-13 14:18:10 +00:00
Michel Dänzer f778b56a74 dix: Skip more code in SetRootClip for ROOT_CLIP_INPUT_ONLY
Despite e957a2e5dd ("dix: Add hybrid full-size/empty-clip mode to
SetRootClip"), I was still seeing all X11 client windows flashing when
the root window size changes with rootless Xwayland (e.g. due to
hotplugging a monitor).

Skipping this code for ROOT_CLIP_INPUT_ONLY fixes the issue for me.
2022-09-12 10:51:05 +00:00
Luc Ma 4603d64483 ci: remove redundant slash in libxcvt repository url
Fixes: 84897891e5 ("ci: Install libxcvt from git")
Signed-off-by: Luc Ma <luc@sietium.com>
2022-09-11 11:53:54 +00:00
Peter Harris 2ab70dede7 os: Restore buffer when writing to network
The commit 9bf46610a9 "os: Immediately
queue initial WriteToClient" effectively disables buffering (of all
writes, not just the "initial" write), since the OS's network buffers
will usually be large enough to hold whatever replies we have sent.

This does improve performance when drawing over a Unix socket (I measure
approximtely 10%, not the ~5x mentioned in that commit message, probably
due to the large changes in this area since that commit), but it
decreases performance when drawing over a network due to the additional
TCP packets. This decrease is small (~10%) in most cases, but if the two
machines have mismatched Nagle / tcp_delay settings it can cause
XGetWindowAttributes to take 200ms (because it's composed of two
requests, the 2nd of which might wait for the ack which is delayed).

Avoid network slowdowns by making the immediate flush conditional on
who->local.

Signed-off-by: Peter Harris <pharris@opentext.com>
2022-09-09 16:52:43 +00:00
Eli Schwartz f5b4b79dcf meson: fix types for some build options
Booleans are supposed to be actual booleans, not strings describing
their value, but Meson has a bug where it silently accepts either one.
It's still wrong to do it though, and other implementations of Meson
such as muon choke on it.

Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
2022-09-08 22:34:11 +00:00
coypu@sdf.org 399cf1272a Simplify auto device configuration for choosing wsfb, fbdev
I wanted to simplify the logic, and thought this is a good opportunity
to eliminate local diffs.

I don't want to list OSes without wsfb, because I understand that is a
netbsd/openbsd driver, and always have it as a fallback for us.

Additionally, I understand "fbdev" is linux-specific, so have the logic
match this intent.
2022-09-07 17:54:40 +00:00
Michel Dänzer 421e066ec4 ci: Check that all expected piglit results are there
Without these, the build jobs would spuriously pass if some of the
expected piglit tests didn't run at all.

v2:
* Use local variables instead of starting their names with underscores
  (Peter Hutterer)
2022-09-07 18:50:15 +02:00
Michel Dänzer 67bca99637 ci: Move build job script to a separate file
Will make it easier to do more complex shell stuff.

No functional change intended.

v2:
* Use /bin/bash instead of /bin/sh (Peter Hutterer)
* Export environment variables on a separate line (Peter)
* Use "set" command instead of shell command line arguments, for
  consistency with debian-install.sh.
2022-09-02 14:52:20 +02:00
Michel Dänzer 3d7df9b452 ci: Use fixed Git commits for piglit, rendercheck & xts
Without this, building a new docker image may pull in new changes from
those repositories, which may affect the CI results.
2022-09-02 14:52:18 +02:00
Michel Dänzer c637ca66ec ci: Install weston from Debian
The commit below was meant to do this, but it slipped through the
cracks.

Fixes: e2dcf31059 ("CI: Update gitlab CI to use debian bullseye")
2022-09-02 14:50:45 +02:00
Michel Dänzer 861f7e9d92 test: Exclude two XTS xsetfontpath tests
They start failing after rebuilding the docker image. It's not clear
why, but looks like it's triggered by changes in Debian bullseye.
2022-09-02 14:49:08 +02:00
Michel Dänzer f9d57d6bcd test: Fix 'xephr' mis-spelling 2022-09-02 14:49:08 +02:00
Michel Dänzer c1870bd284 ci: Always generate artifacts from build jobs
They can be useful also when the job passes.
2022-09-02 10:51:17 +02:00
Michel Dänzer c20437bf48 ci: Include meson logs in build job artifacts
Can be useful for diagnosing CI issues.
2022-09-02 10:33:52 +02:00
FeepingCreature 79c572fbd3 xkb: Avoid length-check failure on empty strings.
_XkbCheckRequestBounds assumes that from..to is at least one byte.
However, request strings can be empty, causing spurious failures in
XkbGetKbdByName calls. To avoid this, before checking bounds make
sure that the length is nonzero.
2022-08-31 06:38:54 +00:00
Alan Coopersmith d23e446558 mi: Use memcpy() instead of memmove() when buffers are known not to overlap
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:10:51 +00:00
Alan Coopersmith 5cc24dbb4c dix: Use memcpy() instead of memmove() when buffers are known not to overlap
Most of these came from a mass bcopy() -> memmove() substitution in 1993
with a commit comment of "Ansification (changed bfuncs -> mfuncs)"

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:10:51 +00:00
Alan Coopersmith f8cbe96d14 os: Use memcpy() instead of memmove() when buffers are known not to overlap
Most of these came from a mass bcopy() -> memmove() substitution in 1993
with a commit comment of "Ansification (changed bfuncs -> mfuncs)"

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:10:51 +00:00
Alan Coopersmith dc5194bb5a gitlab CI: enable commit & merge request checks
Uses ci-fairy from freedesktop/ci-templates

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:04:01 +00:00
Alan Coopersmith f26c7265ec gitlab CI: enable gitlab's builtin static analysis
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:04:01 +00:00
Michel Dänzer f0b2eeaf2f xwayland: Add break statements in pointer_handle_axis
Fixes accidentally taking the WL_POINTER_AXIS_HORIZONTAL_SCROLL case as
well after the WL_POINTER_AXIS_VERTICAL_SCROLL case, which resulted in
vertical wheel events triggering both vertical and horizontal scrolling.

Fixes: e37eeb7af2 ("xwayland: Aggregate scroll axis events to fix kinetic scrolling")
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1367
2022-08-19 11:18:21 +02:00
Peter Hutterer 2700bc6045 xwayland: add support for the XWAYLAND extension
This extension exists to serve one purpose: reliably identifying
Xwayland. Previous attempts at doing so included querying root window
properties, output names or input device names. All these attempts are
somewhat unreliable. Instead, let's use an extension - where that
extension is present we have an Xwayland server.

Clients should never need to do anything but check whether the extension
exists through XQueryExtension or search through XListExtensions.

This extension provides a single QueryVersion request only, and
that is only to provide future compatibility if we ever need anything
other than "this extension exists" functionality.

https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/54

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-08-11 10:30:32 +10:00
JiangWu 190320795f randr: Correctly get physical size for screen with RandR 1.5 2022-08-09 07:17:07 +00:00
Peter Hutterer 354e39eefa xwayland: correct the type for the discrete scroll events
Not that it actually matters since the typedef is int32_t anyway, but
this theoretically avoids an erroneous call to wl_fixed_to_double() on
that value.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-08-02 00:27:32 +00:00
Olivier Fourdan 2efa6d6595 dix: Fix overzealous caching of ResourceClientBits()
Commit c7311654 cached the value of ResourceClientBits(), but that value
depends on the `MaxClients` value set either from the command line or
from the configuration file.

For the latter, a call to ResourceClientBits() is issued before the
configuration file is read, meaning that the cached value is from the
default, not from the maximum number of clients set in the configuration
file.

That obviously causes all sort of issues, including memory corruption
and crashes of the Xserver when reaching the default limit value.

To avoid that issue, also keep the LimitClient value, and recompute the
ilog2() value if that changes, as on startup when the value is set from
the the xorg.conf ServerFlags section.

v2: Drop the `cache == 0` test
    Rename cache vars

Fixes: c7311654 - dix: cache ResourceClientBits() value
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1310
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
2022-07-27 17:09:29 +02:00
Olivier Fourdan 24d7d93ff2 xwayland: Fix "-force-xrandr-emulation"
Commit 7cdcdfea0 introduced a new command line option
"-force-xrandr-emulation", however it is missing from the
ddxProcessArgument().

As a result, trying to use that command option would result in a error:

(EE) Unrecognized option: -force-xrandr-emulation

Make sure "-force-xrandr-emulation" is accounted for in Xwayland's
ddxProcessArgument().

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Fixes: 7cdcdfea0 - xwayland: Add -force-xrandr-emulation switch
2022-07-26 11:06:58 +02:00
Peter Hutterer 11beef0b7f xkb: proof GetCountedString against request length attacks
GetCountedString did a check for the whole string to be within the
request buffer but not for the initial 2 bytes that contain the length
field. A swapped client could send a malformed request to trigger a
swaps() on those bytes, writing into random memory.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-13 14:37:51 +10:00
Peter Hutterer 1bb7767f19 xkb: length-check XkbListComponents before accessing the fields
Each string length field was accessed before checking whether that byte
was actually part of the client request. No real harm here since it
would immediately fail with BadLength anyway, but let's be correct here.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-13 11:38:16 +10:00
Peter Hutterer 44ae6f4419 xkb: length-check XkbGetKbdByName before accessing the fields
This request accessed &stuff[1] before length-checking everything. The
check was performed afterwards so invalid requests would return
BadLength anyway, but let's do this before we actually access the
memory.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-13 11:33:00 +10:00
Peter Hutterer 18f91b950e xkb: fix some possible memleaks in XkbGetKbdByName
GetComponentByName returns an allocated string, so let's free that if we
fail somewhere.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-13 11:32:07 +10:00
Peter Hutterer 6907b6ea2b xkb: add request length validation for XkbSetGeometry
No validation of the various fields on that report were done, so a
malicious client could send a short request that claims it had N
sections, or rows, or keys, and the server would process the request for
N sections, running out of bounds of the actual request data.

Fix this by adding size checks to ensure our data is valid.

ZDI-CAN 16062, CVE-2022-2319.

This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-12 15:19:27 +03:00
Peter Hutterer dd8caf39e9 xkb: swap XkbSetDeviceInfo and XkbSetDeviceInfoCheck
XKB often uses a FooCheck and Foo function pair, the former is supposed
to check all values in the request and error out on BadLength,
BadValue, etc. The latter is then called once we're confident the values
are good (they may still fail on an individual device, but that's a
different topic).

In the case of XkbSetDeviceInfo, those functions were incorrectly
named, with XkbSetDeviceInfo ending up as the checker function and
XkbSetDeviceInfoCheck as the setter function. As a result, the setter
function was called before the checker function, accessing request
data and modifying device state before we ensured that the data is
valid.

In particular, the setter function relied on values being already
byte-swapped. This in turn could lead to potential OOB memory access.

Fix this by correctly naming the functions and moving the length checks
over to the checker function. These were added in 87c64fc5b0 to the
wrong function, probably due to the incorrect naming.

Fixes ZDI-CAN 16070, CVE-2022-2320.

This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative

Introduced in c06e27b2f6

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-12 15:18:52 +03:00
Peter Hutterer f1070c01d6 xkb: switch to array index loops to moving pointers
Most similar loops here use a pointer that advances with each loop
iteration, let's do the same here for consistency.

No functional changes.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2022-07-08 14:27:04 +00:00
Peter Hutterer 6f234c60d9 xkb: whitespace fixes
Sick of fighting vim and git from trying to add this fix with every
commit iteration...

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2022-07-08 14:27:04 +00:00
Peter Hutterer a2762514b6 xkb: rename xkb.h to xkb-procs.h
This header merely defines the various protocol request handlers, so
let's rename it to something less generic and remove its include from
all the files that don't actually need it (which is almost all of them).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2022-07-08 14:27:04 +00:00
Peter Hutterer d9dd300b8d xkb: move the SProcXkbDispatch declaration
Let's move this to where all the other protocol handlers are.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
2022-07-08 14:27:04 +00:00
David Jacewicz e37eeb7af2 xwayland: Aggregate scroll axis events to fix kinetic scrolling
Pointer scroll events are collected in xwl_seat->pending_pointer_event
as they are received in the pointer_handle_axis and
pointer_handle_axis_discrete callbacks. They are dispatched together as a
single event when pointer_handle_frame is called which "Indicates the end of a
set of events that logically belong together" [1]. This patch also sends an
event with dx=0, dy=0 when pointer_handle_axis_stop is called, which is what
allows XWayland clients to recognise the end of a touchpad scroll.

[1] https://wayland.app/protocols/wayland#wl_pointer:event:frame

Signed-off-by: David Jacewicz <david.jacewicz27@protonmail.com>
Fixes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/926
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-07-04 07:10:25 +00:00
Jeremy Huddleston Sequoia 4cfdc5af31 XQuartz: Improve type safety for X11Controller's application menu editor
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2022-07-02 14:24:43 -07:00
Jeremy Huddleston Sequoia dfd057996b xquartz: Fix a possible crash when editing the Application menu due to mutaing immutable arrays
Crashing on exception: -[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object

Application Specific Backtrace 0:
0   CoreFoundation                      0x00007ff80d2c5e9b __exceptionPreprocess + 242
1   libobjc.A.dylib                     0x00007ff80d027e48 objc_exception_throw + 48
2   CoreFoundation                      0x00007ff80d38167b _CFThrowFormattedException + 194
3   CoreFoundation                      0x00007ff80d382a25 -[__NSCFArray removeObjectAtIndex:].cold.1 + 0
4   CoreFoundation                      0x00007ff80d2e6c0b -[__NSCFArray replaceObjectAtIndex:withObject:] + 119
5   X11.bin                             0x00000001003180f9 -[X11Controller tableView:setObjectValue:forTableColumn:row:] + 169

Fixes: https://github.com/XQuartz/XQuartz/issues/267
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2022-07-02 14:24:42 -07:00
Jeremy Huddleston Sequoia 96e682f128 meson: Bump requirement to meson-0.52.0
Bumped in response to warning from meson:

    WARNING: Project specifies a minimum meson_version '>= 0.47.0' but uses features which were added in newer versions:
        * 0.50.0: {'install arg in configure_file'}

Even though there is no warning, we need 0.52.0 for include_type (added in 8264b51e8e8b4c193dc8324cae4f9f675cfbf172) per:
    https://mesonbuild.com/Reference-manual_functions.html#arguments17
2022-07-01 21:38:54 +00:00
Jeremy Huddleston Sequoia e2dcf31059 CI: Update gitlab CI to use debian bullseye
Also install xkbcomp, libwayland-dev, and weston from debian since it is new enough now

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2022-07-01 21:38:54 +00:00