[PATCH v2 2/3] Input: xpad - add packet length check for xpad_process_packet()
From: Griffin Kroah-Hartman
Date: Wed Aug 05 2026 - 06:00:41 EST
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 <griffin@xxxxxxxxx>
---
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