usb: gadget: xudc: fix retrieve request logic
authorHans Yang <hansy@nvidia.com>
Sat, 22 Oct 2016 05:58:36 +0000 (13:58 +0800)
committermobile promotions <svcmobile_promotions@nvidia.com>
Wed, 2 Nov 2016 03:39:53 +0000 (20:39 -0700)
commit98852f69fe5e5c59a574f22024495dd61bf4fc9b
tree52d2901b87491bfb7eb98f49ca1d872324017bf3
parentdac8affb1787b36ab4228c464d457a865757414d
usb: gadget: xudc: fix retrieve request logic

This commit fixes a wrong memory access issue.
When the gadget function driver dequeues a request which
may has been completed by HW, then at handling its transfer
event, retrieving its corresponding request pointer could
be incorrect. SW should check if the request queue
is empty and the request is the correct one to avoid incorrect
memory access.

Below shows the call trace for an incorrect memory access case
Unable to handle kernel paging request at virtual
address ff0000c0be320e0a
PC is at ep_matches+0x38/0x2b4
LR is at usb_ep_autoconfig_ss+0x148/0x180
[<ffffffc00078b50c>] ep_matches+0x38/0x2b4
[<ffffffc00078b8d0>] usb_ep_autoconfig_ss+0x148/0x180
[<ffffffc00078b918>] usb_ep_autoconfig+0x10/0x18
[<ffffffc0007a9c84>] __ffs_func_bind_do_descs+0x100/0x170
[<ffffffc0007aa94c>] ffs_do_descs+0x4c/0x13c
[<ffffffc0007b29b8>] ffs_func_bind+0x224/0x338
[<ffffffc00078bdc4>] usb_add_function+0x98/0x180
[<ffffffc0007b3a68>] functionfs_bind_config+0xd0/0x100
[<ffffffc0007b3ab0>] ffs_function_bind_config+0x18/0x20
[<ffffffc0007a94e8>] android_bind_config+0x44/0x94
[<ffffffc00078c40c>] usb_add_config+0x7c/0x2ac
[<ffffffc0007b3cf4>] android_enable.isra.53+0x44/0x78
[<ffffffc0007ba154>] ffs_ep0_write+0x5c0/0x7bc
[<ffffffc0001a11ec>] vfs_write+0xc0/0x17c
[<ffffffc0001a1a28>] SyS_write+0x94/0x164

Bug 1824860

Change-Id: If742a8b4f8686cfa147c085913cf065b54dd022b
Signed-off-by: Hans Yang <hansy@nvidia.com>
Reviewed-on: http://git-master/r/1243044
Reviewed-by: Mark Kuo <mkuo@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vinayak Pane <vpane@nvidia.com>
drivers/usb/gadget/nvxxx_udc.c