[PATCH v2 2/3] Input: xpad - add packet length check for xpad_process_packet()
Griffin Kroah-Hartman <[email protected]> Wed, 05 Aug 2026 11:56:36 +0200
| Newsgroups | org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Add a check to ensure that the packet being processed is not less than 20 bytes, which would enable an OOB read if true. Signed-off-by: Griffin Kroah-Hartman <[email protected]> --- drivers/input/joystick/xpad.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c index 9ce792503b3a..83bc361b15f7 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c @@ -795,10 +795,13 @@ static void xpad360w_poweroff_controller(struct usb_xpad *xpad); * The used report descriptor was taken from ITO Takayuki's website: * http://euc.jp/periphs/xbox-controller.ja.html */ -static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data) +static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data, u32 len) { struct input_dev *dev = xpad->dev; + if (len < 20) + return; + if (!(xpad->mapping & MAP_STICKS_TO_NULL)) { /* left stick */ input_report_abs(dev, ABS_X, @@ -1259,7 +1262,7 @@ static void xpad_irq_in(struct urb *urb) xpadone_process_packet(xpad, 0, xpad->idata, urb->actual_length); break; default: - xpad_process_packet(xpad, 0, xpad->idata); + xpad_process_packet(xpad, 0, xpad->idata, urb->actual_length); } exit: -- 2.55.0