Files
xserver/include
Peter Hutterer 564ccf2ce9 mi: reset the PointerWindows reference on screen switch
PointerWindows[] keeps a reference to the last window our sprite
entered - changes are usually handled by CheckMotion().

If we switch between screens via XWarpPointer our
dev->spriteInfo->sprite->win is set to the new screen's root window.
If there's another window at the cursor location CheckMotion() will
trigger the right enter/leave events later. If there is not, it skips
that process and we never trigger LeaveWindow() - PointerWindows[] for
the device still refers to the previous window.

If that window is destroyed we have a dangling reference that will
eventually cause a use-after-free bug when checking the window hierarchy
later.

To trigger this, we require:
- two protocol screens
- XWarpPointer to the other screen's root window
- XDestroyWindow before entering any other window

This is a niche bug so we hack around it by making sure we reset the
PointerWindows[] entry so we cannot have a dangling pointer. This
doesn't handle Enter/Leave events correctly but the previous code didn't
either.

CVE-2023-5380, ZDI-CAN-21608

This vulnerability was discovered by:
Sri working with Trend Micro Zero Day Initiative

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Adam Jackson <ajax@redhat.com>
2023-10-25 00:37:47 +00:00
..
2020-07-05 13:07:33 -07:00
2014-07-17 10:19:52 -07:00
2012-03-21 13:54:42 -07:00
2014-11-12 10:25:00 +10:00
2014-11-12 10:25:00 +10:00
2014-11-12 10:25:00 +10:00
2015-06-30 12:17:51 +10:00
2021-12-19 20:01:04 +00:00
2014-11-12 10:25:00 +10:00
2017-06-20 16:37:24 -04:00
2020-09-15 11:43:16 +02:00
2014-11-12 10:25:00 +10:00
2017-03-17 15:14:42 -04:00
2018-01-22 17:28:12 -05:00
2020-07-05 13:07:33 -07:00
2014-11-12 10:25:00 +10:00
2023-08-16 19:56:50 +00:00
2014-11-12 10:25:00 +10:00
2014-11-12 10:25:00 +10:00
2015-01-23 10:35:49 -08:00
2014-11-12 10:25:00 +10:00
2014-11-12 10:25:00 +10:00
2012-03-21 13:54:42 -07:00
2019-04-12 21:53:03 +00:00
2012-03-21 13:54:42 -07:00
2014-11-12 10:25:00 +10:00
2020-07-05 13:07:33 -07:00
2019-01-10 18:40:20 +02:00
2014-11-12 10:25:00 +10:00