xserver: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Oct 7 14:42:19 UTC 2021


 xkb/xkb.c |   26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

New commits:
commit 8b7f4d3259e8b7d1eb3d8a83e8852989e869596a
Author: Ray Strode <rstrode at redhat.com>
Date:   Mon Oct 4 14:27:54 2021 -0400

    xkb: Drop check for XkbSetMapResizeTypes
    
    Commit 446ff2d3177087b8173fa779fa5b77a2a128988b added checks to
    prevalidate the size of incoming SetMap requests.
    
    That commit checks for the XkbSetMapResizeTypes flag to be set before
    allowing key types data to be processed.
    
    key types data can be changed or even just sent wholesale unchanged
    without the number of key types changing, however. The check for
    XkbSetMapResizeTypes rejects those legitimate requests. In particular,
    XkbChangeMap never sets XkbSetMapResizeTypes and so always fails now
    any time XkbKeyTypesMask is in the changed mask.
    
    This commit drops the check for XkbSetMapResizeTypes in flags when
    prevalidating the request length.

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 183d6ffa1..62dee9cb6 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2405,21 +2405,19 @@ _XkbSetMapCheckLength(xkbSetMapReq *req)
         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);
+            _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 */


More information about the xorg-commit mailing list