mirror of
https://github.com/X11Libre/xserver.git
synced 2026-09-11 18:42:23 +00:00
| Filename | Latest commit message | Latest commit date |
|---|---|---|
ProcXTestFakeInput() copies attacker-controlled valuator values into the
fixed-size on-stack array int valuators[MAX_VALUATORS] (MAX_VALUATORS == 36)
when faking an XI DeviceMotionNotify event.
Two flaws allowed a write past the end of that array:
* The initial check used "firstValuator > dev->valuator->numAxes", so
firstValuator == numAxes (legitimately up to 36) was accepted, leaving
base == 36 at the start of the first iteration.
* The per-valuator range check
"firstValuator + numValuators > dev->valuator->numAxes" was performed
*after* the switch that already wrote valuators[base .. base + 5], so the
out-of-bounds write happened before the request was rejected with
BadValue.
A client controlling an XI device with numAxes == 36 could therefore send a
DeviceValuator with first_valuator == 36 and num_valuators in 1..6 and write
up to six attacker-controlled INT32s past the end of the stack buffer.
Tighten the initial check to ">=" and validate num_valuators and the axis
range *before* writing the valuators.
Fixes:
|
||
| .. | ||
| namespace | ||
| bigreq.c | ||
| dpms.c | ||
| dpmsproc.h | ||
| geext.c | ||
| geext_priv.h | ||
| hashtable.c | ||
| hashtable.h | ||
| meson.build | ||
| panoramiX.c | ||
| panoramiX.h | ||
| panoramiXh.h | ||
| panoramiXprocs.c | ||
| panoramiXsrv.h | ||
| panoramiXSwap.c | ||
| saver.c | ||
| security.c | ||
| securitysrv.h | ||
| shape.c | ||
| shm.c | ||
| shmint.h | ||
| sleepuntil.c | ||
| sleepuntil.h | ||
| sync.c | ||
| syncsdk.h | ||
| syncsrv.h | ||
| vidmode.c | ||
| xace.c | ||
| xace.h | ||
| xacestr.h | ||
| xcmisc.c | ||
| xf86bigfont.c | ||
| xf86bigfontsrv.h | ||
| xres.c | ||
| xselinux.h | ||
| xselinux_ext.c | ||
| xselinux_hooks.c | ||
| xselinux_label.c | ||
| xselinuxint.h | ||
| xtest.c | ||
| xvdisp.c | ||
| xvdisp.h | ||
| xvdix.h | ||
| xvdix_priv.h | ||
| xvmain.c | ||
| xvmc.c | ||
| xvmcext.h | ||