2015d83dd5
Add upstream patches fixing the following security issues: CVE-2017-10971: The endianess handling for X Events assumed a fixed size of X Event structures and had a specific 32 byte stack buffer for that. However "GenericEvents" can have any size, so if the events were sent in the wrong endianess, this stack buffer could be overflowed easily. So authenticated X users could overflow the stack in the X Server and with the X server usually running as root gaining root prileveges. CVE-2017-10972: An information leak out of the X server due to an uninitialized stack area when swapping event endianess. For more details, see the advisory: http://www.openwall.com/lists/oss-security/2017/07/06/6 Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
40 lines
1.2 KiB
Diff
40 lines
1.2 KiB
Diff
From 05442de962d3dc624f79fc1a00eca3ffc5489ced Mon Sep 17 00:00:00 2001
|
|
From: Michal Srb <msrb@suse.com>
|
|
Date: Wed, 24 May 2017 15:54:39 +0300
|
|
Subject: [PATCH] Xi: Zero target buffer in SProcXSendExtensionEvent.
|
|
|
|
Make sure that the xEvent eventT is initialized with zeros, the same way as
|
|
in SProcSendEvent.
|
|
|
|
Some event swapping functions do not overwrite all 32 bytes of xEvent
|
|
structure, for example XSecurityAuthorizationRevoked. Two cooperating
|
|
clients, one swapped and the other not, can send
|
|
XSecurityAuthorizationRevoked event to each other to retrieve old stack data
|
|
from X server. This can be potentialy misused to go around ASLR or
|
|
stack-protector.
|
|
|
|
Signed-off-by: Michal Srb <msrb@suse.com>
|
|
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
|
|
---
|
|
Xi/sendexev.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/Xi/sendexev.c b/Xi/sendexev.c
|
|
index 11d82029f..1cf118ab6 100644
|
|
--- a/Xi/sendexev.c
|
|
+++ b/Xi/sendexev.c
|
|
@@ -78,7 +78,7 @@ SProcXSendExtensionEvent(ClientPtr client)
|
|
{
|
|
CARD32 *p;
|
|
int i;
|
|
- xEvent eventT;
|
|
+ xEvent eventT = { .u.u.type = 0 };
|
|
xEvent *eventP;
|
|
EventSwapPtr proc;
|
|
|
|
--
|
|
2.11.0
|
|
|