USB: gadget: validate interface OS descriptor requests
authorSzymon Heidrich <szymon.heidrich@gmail.com>
Mon, 24 Jan 2022 11:14:00 +0000 (12:14 +0100)
committerPDO SCM Team <hudsoncm@motorola.com>
Wed, 4 May 2022 14:26:32 +0000 (09:26 -0500)
commit 75e5b4849b81e19e9efe1654b30d7f3151c33c2c upstream.

Stall the control endpoint in case provided index exceeds array size of
MAX_CONFIG_INTERFACES or when the retrieved function pointer is null.

Mot-CRs-fixed: (CR)
CVE-Fixed: CVE-2022-20009
Bug: 213172319

Change-Id: I12124d435012f99fe266e75c49db35f68e3c9aad
Signed-off-by: Szymon Heidrich <szymon.heidrich@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Gajjala Chakradhar <gajjalac@motorola.com>
Reviewed-on: https://gerrit.mot.com/2242218
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key

drivers/usb/gadget/composite.c

index c718cc1bc04389c5c1211330aeccc0884d3538be..90761a626129b2f65688ac4637609e0fbfe2d2a5 100644 (file)
@@ -1882,6 +1882,9 @@ unknown:
                                if (w_index != 0x5 || (w_value >> 8))
                                        break;
                                interface = w_value & 0xFF;
+                               if (interface >= MAX_CONFIG_INTERFACES ||
+                                   !os_desc_cfg->interface[interface])
+                                       break;
                                buf[6] = w_index;
                                if (w_length == 0x0A) {
                                        count = count_ext_prop(os_desc_cfg,