aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2014-03-27 03:09:21 -0400
committerFelipe Balbi <balbi@ti.com>2014-04-16 11:11:46 -0400
commit5cdf7d5be8443ba0e14a5cfe551c59f931983647 (patch)
tree7c1b12955c427ca5b254d92b517ef91a577f92fa
parentf45e5f00dacf09362a16339d372fcc96705e40c7 (diff)
usb: gadget: gadgetfs: Initialize CHIP to NULL before UDC probe
Otherwise the value from the last probe would be retained that possibly is freed since (the UDC is removed) and therefore no longer relevant. Reproducible with the dummy UDC: modprobe dummy_hcd mount -t gadgetfs gadgetfs /dev/gadget umount /dev/gadget rmmod dummy_hcd mount -t gadgetfs gadgetfs /dev/gadget BUG: unable to handle kernel paging request at ffffffffa066fd9d Call Trace: [<ffffffff811d0cd2>] ? d_alloc_name+0x22/0x50 [<ffffffff812b74dc>] ? selinux_d_instantiate+0x1c/0x20 [<ffffffffa067d687>] gadgetfs_create_file+0x27/0xa0 [gadgetfs] [<ffffffffa067da70>] ? setup_req.isra.4+0x80/0x80 [gadgetfs] [<ffffffffa067dbac>] gadgetfs_fill_super+0x13c/0x180 [gadgetfs] [<ffffffff811bc832>] mount_single+0x92/0xc0 [<ffffffffa067d0f8>] gadgetfs_mount+0x18/0x20 [gadgetfs] [<ffffffff811bc8f9>] mount_fs+0x39/0x1b0 [<ffffffff8116b220>] ? __alloc_percpu+0x10/0x20 [<ffffffff811d6da3>] vfs_kern_mount+0x63/0xf0 [<ffffffff811d93be>] do_mount+0x23e/0xac0 [<ffffffff811660eb>] ? strndup_user+0x4b/0xf0 [<ffffffff811d9f63>] SyS_mount+0x83/0xc0 [<ffffffff81695b69>] system_call_fastpath+0x16/0x1b Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> Signed-off-by: Felipe Balbi <balbi@ti.com>
-rw-r--r--drivers/usb/gadget/inode.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c
index b5be6f0308c2..a925d0cbcd41 100644
--- a/drivers/usb/gadget/inode.c
+++ b/drivers/usb/gadget/inode.c
@@ -2043,6 +2043,7 @@ gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
2043 return -ESRCH; 2043 return -ESRCH;
2044 2044
2045 /* fake probe to determine $CHIP */ 2045 /* fake probe to determine $CHIP */
2046 CHIP = NULL;
2046 usb_gadget_probe_driver(&probe_driver); 2047 usb_gadget_probe_driver(&probe_driver);
2047 if (!CHIP) 2048 if (!CHIP)
2048 return -ENODEV; 2049 return -ENODEV;