usb: gadget: android: Save/restore ep0 completion function
authorJack Pham <jackp@codeaurora.org>
Wed, 19 Feb 2014 06:16:19 +0000 (22:16 -0800)
committerBadhri Jagan Sridharan <badhri@google.com>
Fri, 23 Jan 2015 22:19:19 +0000 (22:19 +0000)
commitea262b409baefe776613660d6b7fdf029f5c96be
treef02ed4219a14dc5e07a4ff1fc6d78d782aa4d793
parentb3df6b14db2cb6919081441789e86ca2efceccca
usb: gadget: android: Save/restore ep0 completion function

The android_setup() function currently gives the f_accessory
setup function first opportunity to handle control requests
in order to support Android Open Accessory (AOA) hosts. That
function makes use of cdev->req and overrides its completion
function, but not in all cases. Thus, if a later request uses
the same request pointer but doesn't (re)set req->complete it
could result in the wrong completion function being called and
causing invalid memory access.

One way to fix this would be to explicitly set req->complete in
all cases but that might require auditing all function drivers
that have ep0 handling. Instead, note that the composite device
had already initially set cdev->req->complete and simply cache
and restore that pointer at the start of android_setup().

Change-Id: I33bcd17bd20687a349d537d1013b52a2afef6996
Signed-off-by: Jack Pham <jackp@codeaurora.org>
drivers/usb/gadget/android.c