Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
12575615
Commit
12575615
authored
Jan 15, 2021
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "CVE-2020-14360: Check SetMap request length carefully."
This reverts commit
4eba4f53
.
parent
013a6ba3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
91 deletions
+0
-91
xkb.c
nx-X11/programs/Xserver/xkb/xkb.c
+0
-91
No files found.
nx-X11/programs/Xserver/xkb/xkb.c
View file @
12575615
...
...
@@ -2202,92 +2202,6 @@ XkbServerMapPtr srv = xkbi->desc->server;
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
;
}
int
ProcXkbSetMap
(
ClientPtr
client
)
{
...
...
@@ -2311,11 +2225,6 @@ ProcXkbSetMap(ClientPtr client)
CHK_KBD_DEVICE
(
dev
,
stuff
->
deviceSpec
);
CHK_MASK_LEGAL
(
0x01
,
stuff
->
present
,
XkbAllMapComponentsMask
);
/* first verify the request length carefully */
rc
=
_XkbSetMapCheckLength
(
stuff
);
if
(
rc
!=
Success
)
return
rc
;
XkbSetCauseXkbReq
(
&
cause
,
X_kbSetMap
,
client
);
xkbi
=
dev
->
key
->
xkbInfo
;
xkb
=
xkbi
->
desc
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment