Module Name: xsrc
Committed By: mrg
Date: Sat Dec 5 20:34:05 UTC 2020
Modified Files:
xsrc/external/mit/xorg-server/dist: configure configure.ac
xsrc/external/mit/xorg-server/dist/Xi: xichangehierarchy.c
xipassivegrab.c
xsrc/external/mit/xorg-server/dist/dix: devices.c events.c
xsrc/external/mit/xorg-server/dist/exa: exa_accel.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc: xf86DDC.h
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting:
driver.c driver.h drmmode_display.c present.c vblank.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd:
bsd_init.c
xsrc/external/mit/xorg-server/dist/include: dix-config.h.in os.h
xsrc/external/mit/xorg-server/dist/os: backtrace.c io.c
xsrc/external/mit/xorg-server/dist/test/xi1:
protocol-xchangedevicecontrol.c
xsrc/external/mit/xorg-server/dist/test/xi2:
protocol-xigetclientpointer.c protocol-xiquerypointer.c
protocol-xiwarppointer.c
xsrc/external/mit/xorg-server/dist/xkb: xkb.c
xsrc/external/mit/xorg-server/include: dix-config.h
Log Message:
merge xorg-server 1.20.10.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 xsrc/external/mit/xorg-server/dist/configure
cvs rdiff -u -r1.9 -r1.10 xsrc/external/mit/xorg-server/dist/configure.ac
cvs rdiff -u -r1.5 -r1.6 \
xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c
cvs rdiff -u -r1.4 -r1.5 \
xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c
cvs rdiff -u -r1.10 -r1.11 xsrc/external/mit/xorg-server/dist/dix/devices.c
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xorg-server/dist/dix/events.c
cvs rdiff -u -r1.5 -r1.6 xsrc/external/mit/xorg-server/dist/exa/exa_accel.c
cvs rdiff -u -r1.3 -r1.4 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h
cvs rdiff -u -r1.4 -r1.5 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c
cvs rdiff -u -r1.5 -r1.6 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c
\
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c
cvs rdiff -u -r1.10 -r1.11 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c
cvs rdiff -u -r1.5 -r1.6 \
xsrc/external/mit/xorg-server/dist/include/dix-config.h.in
cvs rdiff -u -r1.9 -r1.10 xsrc/external/mit/xorg-server/dist/include/os.h
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/xorg-server/dist/os/backtrace.c
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xorg-server/dist/os/io.c
cvs rdiff -u -r1.2 -r1.3 \
xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c
cvs rdiff -u -r1.4 -r1.5 \
xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c \
xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c \
xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c
cvs rdiff -u -r1.5 -r1.6 xsrc/external/mit/xorg-server/dist/xkb/xkb.c
cvs rdiff -u -r1.38 -r1.39 xsrc/external/mit/xorg-server/include/dix-config.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xorg-server/dist/configure
diff -u xsrc/external/mit/xorg-server/dist/configure:1.7 xsrc/external/mit/xorg-server/dist/configure:1.8
--- xsrc/external/mit/xorg-server/dist/configure:1.7 Sun Feb 23 10:26:21 2020
+++ xsrc/external/mit/xorg-server/dist/configure Sat Dec 5 20:34:03 2020
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for xorg-server 1.20.6.
+# Generated by GNU Autoconf 2.69 for xorg-server 1.20.10.
#
# Report bugs to <https://gitlab.freedesktop.org/xorg/xserver/issues>.
#
@@ -651,8 +651,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xorg-server'
PACKAGE_TARNAME='xorg-server'
-PACKAGE_VERSION='1.20.6'
-PACKAGE_STRING='xorg-server 1.20.6'
+PACKAGE_VERSION='1.20.10'
+PACKAGE_STRING='xorg-server 1.20.10'
PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/xorg/xserver/issues'
PACKAGE_URL=''
@@ -947,6 +947,8 @@ PRESENT_FALSE
PRESENT_TRUE
GLX_SYS_LIBS
GLX_DEFINES
+HASHTABLE_FALSE
+HASHTABLE_TRUE
GLX_FALSE
GLX_TRUE
GL_LIBS
@@ -1236,6 +1238,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1530,6 +1533,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1782,6 +1786,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1919,7 +1932,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -2032,7 +2045,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xorg-server 1.20.6 to adapt to many kinds of systems.
+\`configure' configures xorg-server 1.20.10 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2072,6 +2085,7 @@ Fine tuning of the installation director
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -2102,7 +2116,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xorg-server 1.20.6:";;
+ short | recursive ) echo "Configuration of xorg-server 1.20.10:";;
esac
cat <<\_ACEOF
@@ -2293,10 +2307,10 @@ Optional Packages:
org.x)
--with-bundle-version=VERSION
Version to use for X11.app's CFBundleVersion
- (default: 1.20.6)
+ (default: 1.20.10)
--with-bundle-version-string=VERSION
Version to use for X11.app's
- CFBundleShortVersionString (default: 1.20.6)
+ CFBundleShortVersionString (default: 1.20.10)
--with-sparkle-feed-url=URL
URL for the Sparkle feed (default:
https://www.xquartz.org/releases/sparkle/release.xml)
@@ -2553,7 +2567,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xorg-server configure 1.20.6
+xorg-server configure 1.20.10
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3262,7 +3276,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xorg-server $as_me 1.20.6, which was
+It was created by xorg-server $as_me 1.20.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3610,8 +3624,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-RELEASE_DATE="2019-11-22"
-RELEASE_NAME="Enchiladas de Queso"
+RELEASE_DATE="2020-12-01"
+RELEASE_NAME="Chicken Pot Pie"
am__api_version='1.16'
@@ -4129,7 +4143,7 @@ fi
# Define the identity of the package.
PACKAGE='xorg-server'
- VERSION='1.20.6'
+ VERSION='1.20.10'
cat >>confdefs.h <<_ACEOF
@@ -13896,6 +13910,11 @@ else
lt_cv_sys_max_cmd_len=8192;
;;
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
amigaos*)
# On AmigaOS with pdksh, this test takes hours, literally.
# So we just punt and use a minimum line length of 8192.
@@ -19877,11 +19896,11 @@ darwin* | rhapsody*)
version_type=darwin
need_lib_prefix=no
need_version=no
- library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ library_names_spec='$libname$release$versuffix$shared_ext $libname$release$major$shared_ext $libname$shared_ext'
soname_spec='$libname$release$major$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+ shrext_cmds='`test .$module = .yes && echo .bundle || echo .dylib`'
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
@@ -21691,10 +21710,9 @@ fi
-for ac_prog in cpp
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cpp", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cpp; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_RAWCPP+:} false; then :
@@ -21734,9 +21752,63 @@ $as_echo "no" >&6; }
fi
- test -n "$RAWCPP" && break
+fi
+if test -z "$ac_cv_path_RAWCPP"; then
+ ac_pt_RAWCPP=$RAWCPP
+ # Extract the first word of "cpp", so it can be a program name with args.
+set dummy cpp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_RAWCPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_RAWCPP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_RAWCPP="$ac_pt_RAWCPP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_RAWCPP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
done
-test -n "$RAWCPP" || RAWCPP="${CPP}"
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_RAWCPP=$ac_cv_path_ac_pt_RAWCPP
+if test -n "$ac_pt_RAWCPP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_RAWCPP" >&5
+$as_echo "$ac_pt_RAWCPP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_RAWCPP" = x; then
+ RAWCPP="${CPP}"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RAWCPP=$ac_pt_RAWCPP
+ fi
+else
+ RAWCPP="$ac_cv_path_RAWCPP"
+fi
# Check for flag to avoid builtin definitions - assumes unix is predefined,
@@ -23706,7 +23778,7 @@ _ACEOF
if test "${with_bundle_version+set}" = set; then :
withval=$with_bundle_version; BUNDLE_VERSION="${withval}"
else
- BUNDLE_VERSION="1.20.6"
+ BUNDLE_VERSION="1.20.10"
fi
@@ -26326,6 +26398,7 @@ $as_echo "#define SCREENSAVER 1" >>confd
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $SCRNSAVERPROTO"
fi
+HASHTABLE=no
if test "x$RES" = xyes; then
RES_TRUE=
RES_FALSE='#'
@@ -26338,6 +26411,7 @@ if test "x$RES" = xyes; then
$as_echo "#define RES 1" >>confdefs.h
+ HASHTABLE=yes
REQUIRED_MODULES="$REQUIRED_MODULES $RESOURCEPROTO"
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $RESOURCEPROTO"
fi
@@ -27089,6 +27163,7 @@ fi
$as_echo "#define GLXEXT 1" >>confdefs.h
+ HASHTABLE=yes
GLX_LIBS='$(top_builddir)/glx/libglx.la $(top_builddir)/glx/libglxvnd.la'
GLX_SYS_LIBS="$GLX_SYS_LIBS $GL_LIBS"
else
@@ -27103,6 +27178,15 @@ else
fi
+ if test "x$HASHTABLE" = xyes; then
+ HASHTABLE_TRUE=
+ HASHTABLE_FALSE='#'
+else
+ HASHTABLE_TRUE='#'
+ HASHTABLE_FALSE=
+fi
+
+
@@ -29943,6 +30027,17 @@ $as_echo "#define GLAMOR_HAS_EGL_QUERY_D
fi
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy >= 1.5.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "epoxy >= 1.5.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+$as_echo "#define GLAMOR_HAS_EGL_QUERY_DRIVER 1" >>confdefs.h
+
+fi
+
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GBM" >&5
@@ -32943,6 +33038,10 @@ if test -z "${GLX_TRUE}" && test -z "${G
as_fn_error $? "conditional \"GLX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HASHTABLE_TRUE}" && test -z "${HASHTABLE_FALSE}"; then
+ as_fn_error $? "conditional \"HASHTABLE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${PRESENT_TRUE}" && test -z "${PRESENT_FALSE}"; then
as_fn_error $? "conditional \"PRESENT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33532,7 +33631,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xorg-server $as_me 1.20.6, which was
+This file was extended by xorg-server $as_me 1.20.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -33598,7 +33697,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-xorg-server config.status 1.20.6
+xorg-server config.status 1.20.10
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Index: xsrc/external/mit/xorg-server/dist/configure.ac
diff -u xsrc/external/mit/xorg-server/dist/configure.ac:1.9 xsrc/external/mit/xorg-server/dist/configure.ac:1.10
--- xsrc/external/mit/xorg-server/dist/configure.ac:1.9 Sun Feb 23 10:26:21 2020
+++ xsrc/external/mit/xorg-server/dist/configure.ac Sat Dec 5 20:34:04 2020
@@ -26,9 +26,9 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.20.6, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server)
-RELEASE_DATE="2019-11-22"
-RELEASE_NAME="Enchiladas de Queso"
+AC_INIT([xorg-server], 1.20.10, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server)
+RELEASE_DATE="2020-12-01"
+RELEASE_NAME="Chicken Pot Pie"
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
@@ -1064,9 +1064,11 @@ if test "x$SCREENSAVER" = xyes; then
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $SCRNSAVERPROTO"
fi
+HASHTABLE=no
AM_CONDITIONAL(RES, [test "x$RES" = xyes])
if test "x$RES" = xyes; then
AC_DEFINE(RES, 1, [Support X resource extension])
+ HASHTABLE=yes
REQUIRED_MODULES="$REQUIRED_MODULES $RESOURCEPROTO"
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $RESOURCEPROTO"
fi
@@ -1250,6 +1252,7 @@ if test "x$GLX" = xyes; then
PKG_CHECK_MODULES([GL], $GLPROTO $LIBGL)
AC_SUBST(XLIB_CFLAGS)
AC_DEFINE(GLXEXT, 1, [Build GLX extension])
+ HASHTABLE=yes
GLX_LIBS='$(top_builddir)/glx/libglx.la $(top_builddir)/glx/libglxvnd.la'
GLX_SYS_LIBS="$GLX_SYS_LIBS $GL_LIBS"
else
@@ -1257,6 +1260,8 @@ else
fi
AM_CONDITIONAL(GLX, test "x$GLX" = xyes)
+AM_CONDITIONAL(HASHTABLE, test "x$HASHTABLE" = xyes)
+
AC_SUBST([GLX_DEFINES])
AC_SUBST([GLX_SYS_LIBS])
@@ -2053,6 +2058,10 @@ if test "x$GLAMOR" = xyes; then
[AC_DEFINE(GLAMOR_HAS_EGL_QUERY_DMABUF, 1, [Have GLAMOR_HAS_EGL_QUERY_DMABUF])],
[])
+ PKG_CHECK_EXISTS(epoxy >= 1.5.4,
+ [AC_DEFINE(GLAMOR_HAS_EGL_QUERY_DRIVER, 1, [Have GLAMOR_HAS_EGL_QUERY_DRIVER])],
+ [])
+
PKG_CHECK_MODULES(GBM, "$LIBGBM", [GBM=yes], [GBM=no])
if test "x$GBM" = xyes; then
AC_DEFINE(GLAMOR_HAS_GBM, 1,
Index: xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c
diff -u xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.5 xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.6
--- xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.5 Mon Dec 31 09:49:58 2018
+++ xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c Sat Dec 5 20:34:04 2020
@@ -423,7 +423,7 @@ ProcXIChangeHierarchy(ClientPtr client)
if (!stuff->num_changes)
return rc;
- len = ((size_t)stuff->length << 2) - sizeof(xXIChangeHierarchyReq);
+ len = ((size_t)client->req_len << 2) - sizeof(xXIChangeHierarchyReq);
any = (xXIAnyHierarchyChangeInfo *) &stuff[1];
while (stuff->num_changes--) {
Index: xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c
diff -u xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c:1.4 xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c:1.5
--- xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c:1.4 Mon Dec 31 09:49:58 2018
+++ xsrc/external/mit/xorg-server/dist/Xi/xipassivegrab.c Sat Dec 5 20:34:04 2020
@@ -203,8 +203,14 @@ ProcXIPassiveGrabDevice(ClientPtr client
¶m, XI2, &mask);
break;
case XIGrabtypeKeycode:
- status = GrabKey(client, dev, mod_dev, stuff->detail,
- ¶m, XI2, &mask);
+ /* XI2 allows 32-bit keycodes but thanks to XKB we can never
+ * implement this. Just return an error for all keycodes that
+ * cannot work anyway */
+ if (stuff->detail > 255)
+ status = XIAlreadyGrabbed;
+ else
+ status = GrabKey(client, dev, mod_dev, stuff->detail,
+ ¶m, XI2, &mask);
break;
case XIGrabtypeEnter:
case XIGrabtypeFocusIn:
Index: xsrc/external/mit/xorg-server/dist/dix/devices.c
diff -u xsrc/external/mit/xorg-server/dist/dix/devices.c:1.10 xsrc/external/mit/xorg-server/dist/dix/devices.c:1.11
--- xsrc/external/mit/xorg-server/dist/dix/devices.c:1.10 Mon Dec 31 09:49:59 2018
+++ xsrc/external/mit/xorg-server/dist/dix/devices.c Sat Dec 5 20:34:04 2020
@@ -2656,7 +2656,7 @@ GetPairedDevice(DeviceIntPtr dev)
if (!IsMaster(dev) && !IsFloating(dev))
dev = GetMaster(dev, MASTER_ATTACHED);
- return dev->spriteInfo->paired;
+ return dev->spriteInfo? dev->spriteInfo->paired: NULL;
}
/**
Index: xsrc/external/mit/xorg-server/dist/dix/events.c
diff -u xsrc/external/mit/xorg-server/dist/dix/events.c:1.4 xsrc/external/mit/xorg-server/dist/dix/events.c:1.5
--- xsrc/external/mit/xorg-server/dist/dix/events.c:1.4 Sun Feb 23 10:26:21 2020
+++ xsrc/external/mit/xorg-server/dist/dix/events.c Sat Dec 5 20:34:04 2020
@@ -1532,7 +1532,9 @@ ActivatePointerGrab(DeviceIntPtr mouse,
mouse->spriteInfo->sprite->hotPhys.y = 0;
ConfineCursorToWindow(mouse, grab->confineTo, FALSE, TRUE);
}
- DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, NotifyGrab);
+ if (! (grabinfo->grab && oldWin == grabinfo->grab->window
+ && oldWin == grab->window))
+ DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, NotifyGrab);
mouse->valuator->motionHintWindow = NullWindow;
if (syncEvents.playingEvents)
grabinfo->grabTime = syncEvents.time;
@@ -1642,7 +1644,9 @@ ActivateKeyboardGrab(DeviceIntPtr keybd,
oldWin = keybd->focus->win;
if (keybd->valuator)
keybd->valuator->motionHintWindow = NullWindow;
- if (oldWin)
+ if (oldWin &&
+ ! (grabinfo->grab && oldWin == grabinfo->grab->window
+ && oldWin == grab->window))
DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab);
if (syncEvents.playingEvents)
grabinfo->grabTime = syncEvents.time;
Index: xsrc/external/mit/xorg-server/dist/exa/exa_accel.c
diff -u xsrc/external/mit/xorg-server/dist/exa/exa_accel.c:1.5 xsrc/external/mit/xorg-server/dist/exa/exa_accel.c:1.6
--- xsrc/external/mit/xorg-server/dist/exa/exa_accel.c:1.5 Thu Aug 11 00:04:27 2016
+++ xsrc/external/mit/xorg-server/dist/exa/exa_accel.c Sat Dec 5 20:34:04 2020
@@ -1037,7 +1037,7 @@ exaFillRegionSolid(DrawablePtr pDrawable
if (pExaPixmap->pDamage &&
pExaPixmap->sys_ptr && pDrawable->type == DRAWABLE_PIXMAP &&
pDrawable->width == 1 && pDrawable->height == 1 &&
- pDrawable->bitsPerPixel != 24) {
+ pDrawable->bitsPerPixel != 24 && alu == GXcopy) {
RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
switch (pDrawable->bitsPerPixel) {
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h:1.3 xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h:1.4
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h:1.3 Thu Aug 11 00:04:29 2016
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/ddc/xf86DDC.h Sat Dec 5 20:34:04 2020
@@ -48,6 +48,9 @@ extern _X_EXPORT Bool xf86SetDDCproperti
extern _X_EXPORT Bool
xf86MonitorIsHDMI(xf86MonPtr mon);
+extern _X_EXPORT Bool
+gtf_supported(xf86MonPtr mon);
+
extern _X_EXPORT DisplayModePtr
FindDMTMode(int hsize, int vsize, int refresh, Bool rb);
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.4 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.5
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.4 Thu Jan 10 14:33:11 2019
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c Sat Dec 5 20:34:04 2020
@@ -41,6 +41,7 @@
#include "compiler.h"
#include "xf86Pci.h"
#include "mipointer.h"
+#include "mipointrst.h"
#include "micmap.h"
#include <X11/extensions/randr.h>
#include "fb.h"
@@ -131,6 +132,7 @@ static const OptionInfoRec Options[] = {
{OPTION_PAGEFLIP, "PageFlip", OPTV_BOOLEAN, {0}, FALSE},
{OPTION_ZAPHOD_HEADS, "ZaphodHeads", OPTV_STRING, {0}, FALSE},
{OPTION_DOUBLE_SHADOW, "DoubleShadow", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_ATOMIC, "Atomic", OPTV_BOOLEAN, {0}, FALSE},
{-1, NULL, OPTV_NONE, {0}, FALSE}
};
@@ -703,7 +705,7 @@ msBlockHandler_oneshot(ScreenPtr pScreen
msBlockHandler(pScreen, pTimeout);
- drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE);
+ drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE, FALSE);
}
static void
@@ -1038,8 +1040,12 @@ PreInit(ScrnInfoPtr pScrn, int flags)
#endif
}
- ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1);
- ms->atomic_modeset = (ret == 0);
+ if (xf86ReturnOptValBool(ms->drmmode.Options, OPTION_ATOMIC, FALSE)) {
+ ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1);
+ ms->atomic_modeset = (ret == 0);
+ } else {
+ ms->atomic_modeset = FALSE;
+ }
ms->kms_has_modifiers = FALSE;
ret = drmGetCap(ms->fd, DRM_CAP_ADDFB2_MODIFIERS, &value);
@@ -1332,7 +1338,6 @@ static Bool
CreateScreenResources(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
modesettingPtr ms = modesettingPTR(pScrn);
PixmapPtr rootPixmap;
Bool ret;
@@ -1343,7 +1348,7 @@ CreateScreenResources(ScreenPtr pScreen)
ret = pScreen->CreateScreenResources(pScreen);
pScreen->CreateScreenResources = CreateScreenResources;
- if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, pScrn->is_gpu))
+ if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, pScrn->is_gpu, FALSE))
return FALSE;
if (!drmmode_glamor_handle_new_screen_pixmap(&ms->drmmode))
@@ -1398,10 +1403,14 @@ CreateScreenResources(ScreenPtr pScreen)
}
}
- pScrPriv->rrEnableSharedPixmapFlipping = msEnableSharedPixmapFlipping;
- pScrPriv->rrDisableSharedPixmapFlipping = msDisableSharedPixmapFlipping;
+ if (dixPrivateKeyRegistered(rrPrivKey)) {
+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
- pScrPriv->rrStartFlippingPixmapTracking = msStartFlippingPixmapTracking;
+ pScrPriv->rrEnableSharedPixmapFlipping = msEnableSharedPixmapFlipping;
+ pScrPriv->rrDisableSharedPixmapFlipping = msDisableSharedPixmapFlipping;
+
+ pScrPriv->rrStartFlippingPixmapTracking = msStartFlippingPixmapTracking;
+ }
return ret;
}
@@ -1648,6 +1657,21 @@ ScreenInit(ScreenPtr pScreen, int argc,
xf86SetSilkenMouse(pScreen);
miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
+ /* If pageflip is enabled hook the screen's cursor-sprite (swcursor) funcs.
+ * So that we can disabe page-flipping on fallback to a swcursor. */
+ if (ms->drmmode.pageflip) {
+ miPointerScreenPtr PointPriv =
+ dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
+
+ if (!dixRegisterScreenPrivateKey(&ms->drmmode.spritePrivateKeyRec,
+ pScreen, PRIVATE_DEVICE,
+ sizeof(msSpritePrivRec)))
+ return FALSE;
+
+ ms->SpriteFuncs = PointPriv->spriteFuncs;
+ PointPriv->spriteFuncs = &drmmode_sprite_funcs;
+ }
+
/* Need to extend HWcursor support to handle mask interleave */
if (!ms->drmmode.sw_cursor)
xf86_cursors_init(pScreen, ms->cursor_width, ms->cursor_height,
@@ -1796,8 +1820,25 @@ EnterVT(ScrnInfoPtr pScrn)
SetMaster(pScrn);
- if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE))
- return FALSE;
+ drmmode_update_kms_state(&ms->drmmode);
+
+ /* allow not all modes to be set successfully since some events might have
+ * happened while not being master that could prevent the previous
+ * configuration from being re-applied.
+ */
+ if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE, TRUE)) {
+ xf86DisableUnusedFunctions(pScrn);
+
+ /* TODO: check that at least one screen is on, to allow the user to fix
+ * their setup if all modeset failed...
+ */
+
+ /* Tell the desktop environment that something changed, so that they
+ * can hopefully correct the situation
+ */
+ RRSetChanged(xf86ScrnToScreen(pScrn));
+ RRTellChanged(xf86ScrnToScreen(pScrn));
+ }
return TRUE;
}
@@ -1844,6 +1885,14 @@ CloseScreen(ScreenPtr pScreen)
drmmode_free_bos(pScrn, &ms->drmmode);
+ if (ms->drmmode.pageflip) {
+ miPointerScreenPtr PointPriv =
+ dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
+
+ if (PointPriv->spriteFuncs == &drmmode_sprite_funcs)
+ PointPriv->spriteFuncs = ms->SpriteFuncs;
+ }
+
if (pScrn->vtSema) {
LeaveVT(pScrn);
}
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h:1.4 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h:1.5
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h:1.4 Sun Feb 23 10:26:22 2020
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.h Sat Dec 5 20:34:04 2020
@@ -51,6 +51,7 @@ typedef enum {
OPTION_PAGEFLIP,
OPTION_ZAPHOD_HEADS,
OPTION_DOUBLE_SHADOW,
+ OPTION_ATOMIC,
} modesettingOpts;
typedef struct
@@ -96,6 +97,7 @@ typedef struct _modesettingRec {
CreateScreenResourcesProcPtr createScreenResources;
ScreenBlockHandlerProcPtr BlockHandler;
+ miPointerSpriteFuncPtr SpriteFuncs;
void *driver;
drmmode_rec drmmode;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.4 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.5
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.4 Sun Feb 23 10:26:22 2020
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c Sat Dec 5 20:34:04 2020
@@ -208,13 +208,17 @@ ms_present_flip_abort(modesettingPtr ms,
/*
* Test to see if page flipping is possible on the target crtc
+ *
+ * We ignore sw-cursors when *disabling* flipping, we may very well be
+ * returning to scanning out the normal framebuffer *because* we just
+ * switched to sw-cursor mode and check_flip just failed because of that.
*/
static Bool
-ms_present_check_flip(RRCrtcPtr crtc,
- WindowPtr window,
- PixmapPtr pixmap,
- Bool sync_flip,
- PresentFlipReason *reason)
+ms_present_check_unflip(RRCrtcPtr crtc,
+ WindowPtr window,
+ PixmapPtr pixmap,
+ Bool sync_flip,
+ PresentFlipReason *reason)
{
ScreenPtr screen = window->drawable.pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
@@ -281,6 +285,23 @@ ms_present_check_flip(RRCrtcPtr crtc,
return TRUE;
}
+static Bool
+ms_present_check_flip(RRCrtcPtr crtc,
+ WindowPtr window,
+ PixmapPtr pixmap,
+ Bool sync_flip,
+ PresentFlipReason *reason)
+{
+ ScreenPtr screen = window->drawable.pScreen;
+ ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+ modesettingPtr ms = modesettingPTR(scrn);
+
+ if (ms->drmmode.sprites_visible > 0)
+ return FALSE;
+
+ return ms_present_check_unflip(crtc, window, pixmap, sync_flip, reason);
+}
+
/*
* Queue a flip on 'crtc' to 'pixmap' at 'target_msc'. If 'sync_flip' is true,
* then wait for vblank. Otherwise, flip immediately
@@ -343,7 +364,7 @@ ms_present_unflip(ScreenPtr screen, uint
event->event_id = event_id;
event->unflip = TRUE;
- if (ms_present_check_flip(NULL, screen->root, pixmap, TRUE, NULL) &&
+ if (ms_present_check_unflip(NULL, screen->root, pixmap, TRUE, NULL) &&
ms_do_pageflip(screen, pixmap, event, -1, FALSE,
ms_present_flip_handler, ms_present_flip_abort)) {
return;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.5 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.6
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.5 Sun Mar 3 22:01:08 2019
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c Sat Dec 5 20:34:04 2020
@@ -34,8 +34,10 @@
#include <sys/mman.h>
#include <unistd.h>
#include "dumb_bo.h"
+#include "inputstr.h"
#include "xf86str.h"
#include "X11/Xatom.h"
+#include "mi.h"
#include "micmap.h"
#include "xf86cmap.h"
#include "xf86DDC.h"
@@ -754,6 +756,7 @@ drmmode_crtc_set_mode(xf86CrtcPtr crtc,
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
+ ScreenPtr screen = crtc->scrn->pScreen;
drmModeModeInfo kmode;
int output_count = 0;
uint32_t *output_ids = NULL;
@@ -764,6 +767,12 @@ drmmode_crtc_set_mode(xf86CrtcPtr crtc,
if (!drmmode_crtc_get_fb_id(crtc, &fb_id, &x, &y))
return 1;
+#ifdef GLAMOR_HAS_GBM
+ /* Make sure any pending drawing will be visible in a new scanout buffer */
+ if (drmmode->glamor)
+ glamor_finish(screen);
+#endif
+
if (ms->atomic_modeset) {
drmModeAtomicReq *req = drmModeAtomicAlloc();
Bool active;
@@ -1452,8 +1461,6 @@ drmmode_copy_fb(ScrnInfoPtr pScrn, drmmo
FreeScratchGC(gc);
- glamor_finish(pScreen);
-
pScreen->canDoBGNoneRoot = TRUE;
if (drmmode->fbcon_pixmap)
@@ -1794,6 +1801,19 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr c
&drmmode_crtc->prime_pixmap);
}
+static void
+drmmode_clear_pixmap(PixmapPtr pixmap)
+{
+ ScreenPtr screen = pixmap->drawable.pScreen;
+ GCPtr gc;
+
+ gc = GetScratchGC(pixmap->drawable.depth, screen);
+ if (gc) {
+ miClearDrawable(&pixmap->drawable, gc);
+ FreeScratchGC(gc);
+ }
+}
+
static void *
drmmode_shadow_allocate(xf86CrtcPtr crtc, int width, int height)
{
@@ -2423,7 +2443,7 @@ drmmode_output_add_gtf_modes(xf86OutputP
int max_x = 0, max_y = 0;
float max_vrefresh = 0.0;
- if (mon && GTF_SUPPORTED(mon->features.msc))
+ if (mon && gtf_supported(mon))
return Modes;
if (!has_panel_fitter(output))
@@ -3178,6 +3198,8 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn
if (!drmmode_glamor_handle_new_screen_pixmap(drmmode))
goto fail;
+ drmmode_clear_pixmap(ppix);
+
for (i = 0; i < xf86_config->num_crtc; i++) {
xf86CrtcPtr crtc = xf86_config->crtc[i];
@@ -3188,10 +3210,10 @@ drmmode_xf86crtc_resize(ScrnInfoPtr scrn
crtc->rotation, crtc->x, crtc->y);
}
- if (old_fb_id) {
+ if (old_fb_id)
drmModeRmFB(drmmode->fd, old_fb_id);
- drmmode_bo_destroy(drmmode, &old_front);
- }
+
+ drmmode_bo_destroy(drmmode, &old_front);
return TRUE;
@@ -3210,13 +3232,19 @@ static void
drmmode_validate_leases(ScrnInfoPtr scrn)
{
ScreenPtr screen = scrn->pScreen;
- rrScrPrivPtr scr_priv = rrGetScrPriv(screen);
+ rrScrPrivPtr scr_priv;
modesettingPtr ms = modesettingPTR(scrn);
drmmode_ptr drmmode = &ms->drmmode;
drmModeLesseeListPtr lessees;
RRLeasePtr lease, next;
int l;
+ /* Bail out if RandR wasn't initialized. */
+ if (!dixPrivateKeyRegistered(rrPrivKey))
+ return;
+
+ scr_priv = rrGetScrPriv(screen);
+
/* We can't talk to the kernel about leases when VT switched */
if (!scrn->vtSema)
return;
@@ -3433,9 +3461,11 @@ drmmode_adjust_frame(ScrnInfoPtr pScrn,
}
Bool
-drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw)
+drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw,
+ Bool ign_err)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+ Bool success = TRUE;
int c;
for (c = 0; c < config->num_crtc; c++) {
@@ -3483,8 +3513,17 @@ drmmode_set_desired_modes(ScrnInfoPtr pS
if (set_hw) {
if (!crtc->funcs->
set_mode_major(crtc, &crtc->desiredMode, crtc->desiredRotation,
- crtc->desiredX, crtc->desiredY))
- return FALSE;
+ crtc->desiredX, crtc->desiredY)) {
+ if (!ign_err)
+ return FALSE;
+ else {
+ success = FALSE;
+ crtc->enabled = FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Failed to set the desired mode on connector %s\n",
+ output->name);
+ }
+ }
} else {
crtc->mode = crtc->desiredMode;
crtc->rotation = crtc->desiredRotation;
@@ -3498,7 +3537,7 @@ drmmode_set_desired_modes(ScrnInfoPtr pS
/* Validate leases on VT re-entry */
drmmode_validate_leases(pScrn);
- return TRUE;
+ return success;
}
static void
@@ -3583,30 +3622,19 @@ drmmode_setup_colormap(ScreenPtr pScreen
return TRUE;
}
-#ifdef CONFIG_UDEV_KMS
-
#define DRM_MODE_LINK_STATUS_GOOD 0
#define DRM_MODE_LINK_STATUS_BAD 1
-static void
-drmmode_handle_uevents(int fd, void *closure)
+void
+drmmode_update_kms_state(drmmode_ptr drmmode)
{
- drmmode_ptr drmmode = closure;
ScrnInfoPtr scrn = drmmode->scrn;
- struct udev_device *dev;
drmModeResPtr mode_res;
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
int i, j;
Bool found = FALSE;
Bool changed = FALSE;
- while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) {
- udev_device_unref(dev);
- found = TRUE;
- }
- if (!found)
- return;
-
/* Try to re-set the mode on all the connectors with a BAD link-state:
* This may happen if a link degrades and a new modeset is necessary, using
* different link-training parameters. If the kernel found that the current
@@ -3654,7 +3682,7 @@ drmmode_handle_uevents(int fd, void *clo
goto out;
if (mode_res->count_crtcs != config->num_crtc) {
- ErrorF("number of CRTCs changed - failed to handle, %d vs %d\n", mode_res->count_crtcs, config->num_crtc);
+ /* this triggers with Zaphod mode where we don't currently support connector hotplug or MST. */
goto out_free_res;
}
@@ -3703,15 +3731,16 @@ drmmode_handle_uevents(int fd, void *clo
drmmode_output_init(scrn, drmmode, mode_res, i, TRUE, 0);
}
- /* Check to see if a lessee has disappeared */
- drmmode_validate_leases(scrn);
-
if (changed) {
RRSetChanged(xf86ScrnToScreen(scrn));
RRTellChanged(xf86ScrnToScreen(scrn));
}
out_free_res:
+
+ /* Check to see if a lessee has disappeared */
+ drmmode_validate_leases(scrn);
+
drmModeFreeResources(mode_res);
out:
RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
@@ -3720,6 +3749,25 @@ out:
#undef DRM_MODE_LINK_STATUS_BAD
#undef DRM_MODE_LINK_STATUS_GOOD
+#ifdef CONFIG_UDEV_KMS
+
+static void
+drmmode_handle_uevents(int fd, void *closure)
+{
+ drmmode_ptr drmmode = closure;
+ struct udev_device *dev;
+ Bool found = FALSE;
+
+ while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) {
+ udev_device_unref(dev);
+ found = TRUE;
+ }
+ if (!found)
+ return;
+
+ drmmode_update_kms_state(drmmode);
+}
+
#endif
void
@@ -3914,3 +3962,102 @@ drmmode_get_default_bpp(ScrnInfoPtr pScr
drmModeFreeResources(mode_res);
return;
}
+
+/*
+ * We hook the screen's cursor-sprite (swcursor) functions to see if a swcursor
+ * is active. When a swcursor is active we disabe page-flipping.
+ */
+
+static void drmmode_sprite_do_set_cursor(msSpritePrivPtr sprite_priv,
+ ScrnInfoPtr scrn, int x, int y)
+{
+ modesettingPtr ms = modesettingPTR(scrn);
+ CursorPtr cursor = sprite_priv->cursor;
+ Bool sprite_visible = sprite_priv->sprite_visible;
+
+ if (cursor) {
+ x -= cursor->bits->xhot;
+ y -= cursor->bits->yhot;
+
+ sprite_priv->sprite_visible =
+ x < scrn->virtualX && y < scrn->virtualY &&
+ (x + cursor->bits->width > 0) &&
+ (y + cursor->bits->height > 0);
+ } else {
+ sprite_priv->sprite_visible = FALSE;
+ }
+
+ ms->drmmode.sprites_visible += sprite_priv->sprite_visible - sprite_visible;
+}
+
+static void drmmode_sprite_set_cursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ CursorPtr pCursor, int x, int y)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+ msSpritePrivPtr sprite_priv = msGetSpritePriv(pDev, ms, pScreen);
+
+ sprite_priv->cursor = pCursor;
+ drmmode_sprite_do_set_cursor(sprite_priv, scrn, x, y);
+
+ ms->SpriteFuncs->SetCursor(pDev, pScreen, pCursor, x, y);
+}
+
+static void drmmode_sprite_move_cursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ int x, int y)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+ msSpritePrivPtr sprite_priv = msGetSpritePriv(pDev, ms, pScreen);
+
+ drmmode_sprite_do_set_cursor(sprite_priv, scrn, x, y);
+
+ ms->SpriteFuncs->MoveCursor(pDev, pScreen, x, y);
+}
+
+static Bool drmmode_sprite_realize_realize_cursor(DeviceIntPtr pDev,
+ ScreenPtr pScreen,
+ CursorPtr pCursor)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+
+ return ms->SpriteFuncs->RealizeCursor(pDev, pScreen, pCursor);
+}
+
+static Bool drmmode_sprite_realize_unrealize_cursor(DeviceIntPtr pDev,
+ ScreenPtr pScreen,
+ CursorPtr pCursor)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+
+ return ms->SpriteFuncs->UnrealizeCursor(pDev, pScreen, pCursor);
+}
+
+static Bool drmmode_sprite_device_cursor_initialize(DeviceIntPtr pDev,
+ ScreenPtr pScreen)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+
+ return ms->SpriteFuncs->DeviceCursorInitialize(pDev, pScreen);
+}
+
+static void drmmode_sprite_device_cursor_cleanup(DeviceIntPtr pDev,
+ ScreenPtr pScreen)
+{
+ ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ modesettingPtr ms = modesettingPTR(scrn);
+
+ ms->SpriteFuncs->DeviceCursorCleanup(pDev, pScreen);
+}
+
+miPointerSpriteFuncRec drmmode_sprite_funcs = {
+ .RealizeCursor = drmmode_sprite_realize_realize_cursor,
+ .UnrealizeCursor = drmmode_sprite_realize_unrealize_cursor,
+ .SetCursor = drmmode_sprite_set_cursor,
+ .MoveCursor = drmmode_sprite_move_cursor,
+ .DeviceCursorInitialize = drmmode_sprite_device_cursor_initialize,
+ .DeviceCursorCleanup = drmmode_sprite_device_cursor_cleanup,
+};
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c:1.5 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c:1.6
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c:1.5 Sun Feb 23 10:26:22 2020
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/vblank.c Sat Dec 5 20:34:04 2020
@@ -220,7 +220,7 @@ static RRCrtcPtr
ms_covering_randr_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms)
{
ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
- rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
+ rrScrPrivPtr pScrPriv;
RRCrtcPtr crtc, best_crtc;
int coverage, best_coverage;
int c;
@@ -230,6 +230,11 @@ ms_covering_randr_crtc(ScreenPtr pScreen
best_crtc = NULL;
best_coverage = 0;
+ if (!dixPrivateKeyRegistered(rrPrivKey))
+ return NULL;
+
+ pScrPriv = rrGetScrPriv(pScreen);
+
if (!pScrPriv)
return NULL;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c:1.10 xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c:1.11
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c:1.10 Mon Dec 31 09:50:01 2018
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bsd/bsd_init.c Sat Dec 5 20:34:04 2020
@@ -659,3 +659,9 @@ xf86UseMsg()
ErrorF("don't detach controlling tty (for debugging only)\n");
return;
}
+
+void
+xf86OSInputThreadInit(void)
+{
+ return;
+}
Index: xsrc/external/mit/xorg-server/dist/include/dix-config.h.in
diff -u xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.5 xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.6
--- xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.5 Sun Feb 23 10:26:22 2020
+++ xsrc/external/mit/xorg-server/dist/include/dix-config.h.in Sat Dec 5 20:34:04 2020
@@ -488,6 +488,9 @@
/* Glamor can use eglQueryDmaBuf* functions */
#undef GLAMOR_HAS_EGL_QUERY_DMABUF
+/* Glamor can use EGL_MESA_query_driver functions */
+#undef GLAMOR_HAS_EGL_QUERY_DRIVER
+
/* byte order */
#undef X_BYTE_ORDER
Index: xsrc/external/mit/xorg-server/dist/include/os.h
diff -u xsrc/external/mit/xorg-server/dist/include/os.h:1.9 xsrc/external/mit/xorg-server/dist/include/os.h:1.10
--- xsrc/external/mit/xorg-server/dist/include/os.h:1.9 Mon Dec 31 09:50:02 2018
+++ xsrc/external/mit/xorg-server/dist/include/os.h Sat Dec 5 20:34:04 2020
@@ -569,6 +569,8 @@ extern _X_EXPORT void
AbortDDX(enum ExitCode error);
extern _X_EXPORT void
ddxGiveUp(enum ExitCode error);
+extern _X_EXPORT void
+ddxInputThreadInit(void);
extern _X_EXPORT int
TimeSinceLastInputEvent(void);
Index: xsrc/external/mit/xorg-server/dist/os/backtrace.c
diff -u xsrc/external/mit/xorg-server/dist/os/backtrace.c:1.2 xsrc/external/mit/xorg-server/dist/os/backtrace.c:1.3
--- xsrc/external/mit/xorg-server/dist/os/backtrace.c:1.2 Wed May 15 18:29:21 2019
+++ xsrc/external/mit/xorg-server/dist/os/backtrace.c Sat Dec 5 20:34:04 2020
@@ -45,6 +45,7 @@ xorg_backtrace(void)
{
unw_cursor_t cursor;
unw_context_t context;
+ unw_word_t ip;
unw_word_t off;
unw_proc_info_t pip;
int ret, i = 0;
@@ -88,7 +89,9 @@ xorg_backtrace(void)
procname[1] = 0;
}
- if (dladdr((void *)(uintptr_t)(pip.start_ip + off), &dlinfo) && dlinfo.dli_fname &&
+ if (unw_get_reg (&cursor, UNW_REG_IP, &ip) < 0)
+ ip = pip.start_ip + off;
+ if (dladdr((void *)(uintptr_t)(ip), &dlinfo) && dlinfo.dli_fname &&
*dlinfo.dli_fname)
filename = dlinfo.dli_fname;
else
@@ -96,7 +99,7 @@ xorg_backtrace(void)
ErrorFSigSafe("%u: %s (%s%s+0x%x) [%p]\n", i++, filename, procname,
ret == -UNW_ENOMEM ? "..." : "", (int)off,
- (void *)(uintptr_t)(pip.start_ip + off));
+ (void *)(uintptr_t)(ip));
ret = unw_step(&cursor);
if (ret < 0)
Index: xsrc/external/mit/xorg-server/dist/os/io.c
diff -u xsrc/external/mit/xorg-server/dist/os/io.c:1.4 xsrc/external/mit/xorg-server/dist/os/io.c:1.5
--- xsrc/external/mit/xorg-server/dist/os/io.c:1.4 Mon Dec 31 09:50:02 2018
+++ xsrc/external/mit/xorg-server/dist/os/io.c Sat Dec 5 20:34:04 2020
@@ -559,6 +559,11 @@ void
ResetCurrentRequest(ClientPtr client)
{
OsCommPtr oc = (OsCommPtr) client->osPrivate;
+
+ /* ignore dying clients */
+ if (!oc)
+ return;
+
register ConnectionInputPtr oci = oc->input;
register xReq *request;
int gotnow, needed;
Index: xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c
diff -u xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c:1.2 xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c:1.3
--- xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c:1.2 Mon Dec 31 09:50:03 2018
+++ xsrc/external/mit/xorg-server/dist/test/xi1/protocol-xchangedevicecontrol.c Sat Dec 5 20:34:05 2020
@@ -37,7 +37,7 @@
#include "protocol-common.h"
-ClientRec client_window;
+extern ClientRec client_window;
static ClientRec client_request;
static void
Index: xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c
diff -u xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c:1.4 xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c:1.5
--- xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c:1.4 Mon Dec 31 09:50:03 2018
+++ xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xigetclientpointer.c Sat Dec 5 20:34:05 2020
@@ -46,7 +46,7 @@ static struct {
int win;
} test_data;
-ClientRec client_window;
+extern ClientRec client_window;
static ClientRec client_request;
static void
Index: xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c
diff -u xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c:1.4 xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c:1.5
--- xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c:1.4 Mon Dec 31 09:50:03 2018
+++ xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiquerypointer.c Sat Dec 5 20:34:05 2020
@@ -41,7 +41,7 @@
#include "protocol-common.h"
-ClientRec client_window;
+extern ClientRec client_window;
static ClientRec client_request;
static void reply_XIQueryPointer_data(ClientPtr client, int len,
char *data, void *closure);
Index: xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c
diff -u xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c:1.4 xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c:1.5
--- xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c:1.4 Mon Dec 31 09:50:03 2018
+++ xsrc/external/mit/xorg-server/dist/test/xi2/protocol-xiwarppointer.c Sat Dec 5 20:34:05 2020
@@ -44,7 +44,7 @@
static int expected_x = SPRITE_X;
static int expected_y = SPRITE_Y;
-ClientRec client_window;
+extern ClientRec client_window;
/**
* This function overrides the one in the screen rec.
Index: xsrc/external/mit/xorg-server/dist/xkb/xkb.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.5 xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.6
--- xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.5 Sun Feb 23 10:26:23 2020
+++ xsrc/external/mit/xorg-server/dist/xkb/xkb.c Sat Dec 5 20:34:05 2020
@@ -152,6 +152,19 @@ static RESTYPE RT_XKBCLIENT;
#define CHK_REQ_KEY_RANGE(err,first,num,r) \
CHK_REQ_KEY_RANGE2(err,first,num,r,client->errorValue,BadValue)
+static Bool
+_XkbCheckRequestBounds(ClientPtr client, void *stuff, void *from, void *to) {
+ char *cstuff = (char *)stuff;
+ char *cfrom = (char *)from;
+ char *cto = (char *)to;
+
+ return cfrom < cto &&
+ cfrom >= cstuff &&
+ cfrom < cstuff + ((size_t)client->req_len << 2) &&
+ cto >= cstuff &&
+ cto <= cstuff + ((size_t)client->req_len << 2);
+}
+
/***====================================================================***/
int
@@ -2369,6 +2382,93 @@ SetVirtualModMap(XkbSrvInfoPtr xkbi,
return (char *) wire;
}
+#define _add_check_len(new) \
+ if (len > UINT32_MAX - (new) || len > req_len - (new)) goto bad; \
+ else len += new
+
+/**
+ * Check the length of the SetMap request
+ */
+static int
+_XkbSetMapCheckLength(xkbSetMapReq *req)
+{
+ size_t len = sz_xkbSetMapReq, req_len = req->length << 2;
+ xkbKeyTypeWireDesc *keytype;
+ xkbSymMapWireDesc *symmap;
+ BOOL preserve;
+ int i, map_count, nSyms;
+
+ if (req_len < len)
+ goto bad;
+ /* types */
+ if (req->present & XkbKeyTypesMask) {
+ keytype = (xkbKeyTypeWireDesc *)(req + 1);
+ for (i = 0; i < req->nTypes; i++) {
+ _add_check_len(XkbPaddedSize(sz_xkbKeyTypeWireDesc));
+ if (req->flags & XkbSetMapResizeTypes) {
+ _add_check_len(keytype->nMapEntries
+ * sz_xkbKTSetMapEntryWireDesc);
+ preserve = keytype->preserve;
+ map_count = keytype->nMapEntries;
+ if (preserve) {
+ _add_check_len(map_count * sz_xkbModsWireDesc);
+ }
+ keytype += 1;
+ keytype = (xkbKeyTypeWireDesc *)
+ ((xkbKTSetMapEntryWireDesc *)keytype + map_count);
+ if (preserve)
+ keytype = (xkbKeyTypeWireDesc *)
+ ((xkbModsWireDesc *)keytype + map_count);
+ }
+ }
+ }
+ /* syms */
+ if (req->present & XkbKeySymsMask) {
+ symmap = (xkbSymMapWireDesc *)((char *)req + len);
+ for (i = 0; i < req->nKeySyms; i++) {
+ _add_check_len(sz_xkbSymMapWireDesc);
+ nSyms = symmap->nSyms;
+ _add_check_len(nSyms*sizeof(CARD32));
+ symmap += 1;
+ symmap = (xkbSymMapWireDesc *)((CARD32 *)symmap + nSyms);
+ }
+ }
+ /* actions */
+ if (req->present & XkbKeyActionsMask) {
+ _add_check_len(req->totalActs * sz_xkbActionWireDesc
+ + XkbPaddedSize(req->nKeyActs));
+ }
+ /* behaviours */
+ if (req->present & XkbKeyBehaviorsMask) {
+ _add_check_len(req->totalKeyBehaviors * sz_xkbBehaviorWireDesc);
+ }
+ /* vmods */
+ if (req->present & XkbVirtualModsMask) {
+ _add_check_len(XkbPaddedSize(Ones(req->virtualMods)));
+ }
+ /* explicit */
+ if (req->present & XkbExplicitComponentsMask) {
+ /* two bytes per non-zero explicit componen */
+ _add_check_len(XkbPaddedSize(req->totalKeyExplicit * sizeof(CARD16)));
+ }
+ /* modmap */
+ if (req->present & XkbModifierMapMask) {
+ /* two bytes per non-zero modmap component */
+ _add_check_len(XkbPaddedSize(req->totalModMapKeys * sizeof(CARD16)));
+ }
+ /* vmodmap */
+ if (req->present & XkbVirtualModMapMask) {
+ _add_check_len(req->totalVModMapKeys * sz_xkbVModMapWireDesc);
+ }
+ if (len == req_len)
+ return Success;
+bad:
+ ErrorF("[xkb] BOGUS LENGTH in SetMap: expected %ld got %ld\n",
+ len, req_len);
+ return BadLength;
+}
+
+
/**
* Check if the given request can be applied to the given device but don't
* actually do anything..
@@ -2626,6 +2726,11 @@ ProcXkbSetMap(ClientPtr client)
CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
CHK_MASK_LEGAL(0x01, stuff->present, XkbAllMapComponentsMask);
+ /* first verify the request length carefully */
+ rc = _XkbSetMapCheckLength(stuff);
+ if (rc != Success)
+ return rc;
+
tmp = (char *) &stuff[1];
/* Check if we can to the SetMap on the requested device. If this
@@ -4045,6 +4150,8 @@ _XkbSetNamesCheck(ClientPtr client, Devi
client->errorValue = _XkbErrCode2(0x04, stuff->firstType);
return BadAccess;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + stuff->nTypes))
+ return BadLength;
old = tmp;
tmp = _XkbCheckAtoms(tmp, stuff->nTypes, client->swapped, &bad);
if (!tmp) {
@@ -4074,6 +4181,8 @@ _XkbSetNamesCheck(ClientPtr client, Devi
}
width = (CARD8 *) tmp;
tmp = (CARD32 *) (((char *) tmp) + XkbPaddedSize(stuff->nKTLevels));
+ if (!_XkbCheckRequestBounds(client, stuff, width, tmp))
+ return BadLength;
type = &xkb->map->types[stuff->firstKTLevel];
for (i = 0; i < stuff->nKTLevels; i++, type++) {
if (width[i] == 0)
@@ -4083,6 +4192,8 @@ _XkbSetNamesCheck(ClientPtr client, Devi
type->num_levels, width[i]);
return BadMatch;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + width[i]))
+ return BadLength;
tmp = _XkbCheckAtoms(tmp, width[i], client->swapped, &bad);
if (!tmp) {
client->errorValue = bad;
@@ -4095,6 +4206,9 @@ _XkbSetNamesCheck(ClientPtr client, Devi
client->errorValue = 0x08;
return BadMatch;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp,
+ tmp + Ones(stuff->indicators)))
+ return BadLength;
tmp = _XkbCheckMaskedAtoms(tmp, XkbNumIndicators, stuff->indicators,
client->swapped, &bad);
if (!tmp) {
@@ -4107,6 +4221,9 @@ _XkbSetNamesCheck(ClientPtr client, Devi
client->errorValue = 0x09;
return BadMatch;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp,
+ tmp + Ones(stuff->virtualMods)))
+ return BadLength;
tmp = _XkbCheckMaskedAtoms(tmp, XkbNumVirtualMods,
(CARD32) stuff->virtualMods,
client->swapped, &bad);
@@ -4120,6 +4237,9 @@ _XkbSetNamesCheck(ClientPtr client, Devi
client->errorValue = 0x0a;
return BadMatch;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp,
+ tmp + Ones(stuff->groupNames)))
+ return BadLength;
tmp = _XkbCheckMaskedAtoms(tmp, XkbNumKbdGroups,
(CARD32) stuff->groupNames,
client->swapped, &bad);
@@ -4141,9 +4261,14 @@ _XkbSetNamesCheck(ClientPtr client, Devi
stuff->nKeys);
return BadValue;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + stuff->nKeys))
+ return BadLength;
tmp += stuff->nKeys;
}
if ((stuff->which & XkbKeyAliasesMask) && (stuff->nKeyAliases > 0)) {
+ if (!_XkbCheckRequestBounds(client, stuff, tmp,
+ tmp + (stuff->nKeyAliases * 2)))
+ return BadLength;
tmp += stuff->nKeyAliases * 2;
}
if (stuff->which & XkbRGNamesMask) {
@@ -4151,6 +4276,9 @@ _XkbSetNamesCheck(ClientPtr client, Devi
client->errorValue = _XkbErrCode2(0x0d, stuff->nRadioGroups);
return BadValue;
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp,
+ tmp + stuff->nRadioGroups))
+ return BadLength;
tmp = _XkbCheckAtoms(tmp, stuff->nRadioGroups, client->swapped, &bad);
if (!tmp) {
client->errorValue = bad;
@@ -4344,6 +4472,8 @@ ProcXkbSetNames(ClientPtr client)
/* check device-independent stuff */
tmp = (CARD32 *) &stuff[1];
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbKeycodesNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -4351,6 +4481,8 @@ ProcXkbSetNames(ClientPtr client)
return BadAtom;
}
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbGeometryNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -4358,6 +4490,8 @@ ProcXkbSetNames(ClientPtr client)
return BadAtom;
}
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbSymbolsNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -4365,6 +4499,8 @@ ProcXkbSetNames(ClientPtr client)
return BadAtom;
}
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbPhysSymbolsNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -4372,6 +4508,8 @@ ProcXkbSetNames(ClientPtr client)
return BadAtom;
}
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbTypesNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -4379,6 +4517,8 @@ ProcXkbSetNames(ClientPtr client)
return BadAtom;
}
}
+ if (!_XkbCheckRequestBounds(client, stuff, tmp, tmp + 1))
+ return BadLength;
if (stuff->which & XkbCompatNameMask) {
tmp = _XkbCheckAtoms(tmp, 1, client->swapped, &bad);
if (!tmp) {
@@ -6485,7 +6625,9 @@ SetDeviceIndicators(char *wire,
unsigned changed,
int num,
int *status_rtrn,
- ClientPtr client, xkbExtensionDeviceNotify * ev)
+ ClientPtr client,
+ xkbExtensionDeviceNotify * ev,
+ xkbSetDeviceInfoReq * stuff)
{
xkbDeviceLedsWireDesc *ledWire;
int i;
@@ -6506,6 +6648,11 @@ SetDeviceIndicators(char *wire,
xkbIndicatorMapWireDesc *mapWire;
XkbSrvLedInfoPtr sli;
+ if (!_XkbCheckRequestBounds(client, stuff, ledWire, ledWire + 1)) {
+ *status_rtrn = BadLength;
+ return (char *) ledWire;
+ }
+
namec = mapc = statec = 0;
sli = XkbFindSrvLedInfo(dev, ledWire->ledClass, ledWire->ledID,
XkbXI_IndicatorMapsMask);
@@ -6524,6 +6671,10 @@ SetDeviceIndicators(char *wire,
memset((char *) sli->names, 0, XkbNumIndicators * sizeof(Atom));
for (n = 0, bit = 1; n < XkbNumIndicators; n++, bit <<= 1) {
if (ledWire->namesPresent & bit) {
+ if (!_XkbCheckRequestBounds(client, stuff, atomWire, atomWire + 1)) {
+ *status_rtrn = BadLength;
+ return (char *) atomWire;
+ }
sli->names[n] = (Atom) *atomWire;
if (sli->names[n] == None)
ledWire->namesPresent &= ~bit;
@@ -6541,6 +6692,10 @@ SetDeviceIndicators(char *wire,
if (ledWire->mapsPresent) {
for (n = 0, bit = 1; n < XkbNumIndicators; n++, bit <<= 1) {
if (ledWire->mapsPresent & bit) {
+ if (!_XkbCheckRequestBounds(client, stuff, mapWire, mapWire + 1)) {
+ *status_rtrn = BadLength;
+ return (char *) mapWire;
+ }
sli->maps[n].flags = mapWire->flags;
sli->maps[n].which_groups = mapWire->whichGroups;
sli->maps[n].groups = mapWire->groups;
@@ -6620,7 +6775,7 @@ _XkbSetDeviceInfoCheck(ClientPtr client,
ed.deviceID = dev->id;
wire = (char *) &stuff[1];
if (stuff->change & XkbXI_ButtonActionsMask) {
- int nBtns, sz, i;
+ int nBtns, sz, i;
XkbAction *acts;
DeviceIntPtr kbd;
@@ -6632,7 +6787,11 @@ _XkbSetDeviceInfoCheck(ClientPtr client,
return BadAlloc;
dev->button->xkb_acts = acts;
}
+ if (stuff->firstBtn + stuff->nBtns > nBtns)
+ return BadValue;
sz = stuff->nBtns * SIZEOF(xkbActionWireDesc);
+ if (!_XkbCheckRequestBounds(client, stuff, wire, (char *) wire + sz))
+ return BadLength;
memcpy((char *) &acts[stuff->firstBtn], (char *) wire, sz);
wire += sz;
ed.reason |= XkbXI_ButtonActionsMask;
@@ -6653,7 +6812,8 @@ _XkbSetDeviceInfoCheck(ClientPtr client,
int status = Success;
wire = SetDeviceIndicators(wire, dev, stuff->change,
- stuff->nDeviceLedFBs, &status, client, &ed);
+ stuff->nDeviceLedFBs, &status, client, &ed,
+ stuff);
if (status != Success)
return status;
}
Index: xsrc/external/mit/xorg-server/include/dix-config.h
diff -u xsrc/external/mit/xorg-server/include/dix-config.h:1.38 xsrc/external/mit/xorg-server/include/dix-config.h:1.39
--- xsrc/external/mit/xorg-server/include/dix-config.h:1.38 Sun Feb 23 10:42:56 2020
+++ xsrc/external/mit/xorg-server/include/dix-config.h Sat Dec 5 20:34:05 2020
@@ -497,9 +497,13 @@
/* GBM has modifiers support */
/* #undef GBM_BO_WITH_MODIFIERS */
+/* XXXMRG check this and query driver */
/* Glamor can use eglQueryDmaBuf* functions */
/* #undef GLAMOR_HAS_EGL_QUERY_DMABUF */
+/* Glamor can use EGL_MESA_query_driver functions */
+/* #undef GLAMOR_HAS_EGL_QUERY_DRIVER */
+
#if 0
/* byte order */
#define X_BYTE_ORDER X_LITTLE_ENDIAN