[PATCH] USB: Gadget RNDIS fix alloc bug. (buffer overflow)
authorShaun Tancheff <shaun@tancheff.com>
Thu, 23 Feb 2006 03:47:19 +0000 (19:47 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 28 Feb 2006 20:42:06 +0000 (12:42 -0800)
Remote NDIS response to OID_GEN_SUPPORTED_LIST only allocated space
for the data attached to the reply, and not the reply structure
itself. This caused other kmalloc'd memory to be corrupted.

Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/rndis.c

index 9689efe..6d6eaad 100644 (file)
@@ -853,11 +853,14 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
        // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID));
        if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;
        
-       /* 
-        * we need more memory: 
-        * oid_supported_list is the largest answer 
+       /*
+        * we need more memory:
+        * gen_ndis_query_resp expects enough space for
+        * rndis_query_cmplt_type followed by data.
+        * oid_supported_list is the largest data reply
         */
-       r = rndis_add_response (configNr, sizeof (oid_supported_list));
+       r = rndis_add_response (configNr,
+               sizeof (oid_supported_list) + sizeof(rndis_query_cmplt_type));
        if (!r)
                return -ENOMEM;
        resp = (rndis_query_cmplt_type *) r->buf;