linux_dsm_epyc7002/drivers/usb/gadget
Sebastian Andrzej Siewior 779d516ca9 usb: gadget: composite: don't call driver's unbind() if bind() failed
Lets assume nokia_bind() starts with "return -EINVAL". After loading the
gadget we end up with:

|udc dummy_udc.0: registering UDC driver [g_nokia]
|BUG: unable to handle kernel NULL pointer dereference at 00000040
|IP: [<c11f9555>] __list_add+0x25/0xf0
|Call Trace:
| [<c12d4e21>] rollback_registered+0x21/0x40
| [<c12d513f>] unregister_netdevice_queue+0x4f/0xa0
| [<c12d5259>] unregister_netdev+0x19/0x30
| [<f81335b2>] gphonet_cleanup+0x32/0x50 [g_nokia]
| [<f8133f1c>] nokia_unbind+0x1c/0x2a [g_nokia]
| [<f802509f>] __composite_unbind.constprop.10+0x4f/0xb0 [libcomposite]
| [<f80255be>] composite_bind+0x1ae/0x230 [libcomposite]
| [<c129e576>] usb_gadget_probe_driver+0xc6/0x1b0
| [<f8024aba>] usb_composite_probe+0x7a/0xa0 [libcomposite]

That is crash from nokia_unbind() invoked via nokia_bind(). This crash
will look different we if make it until usb_string_ids_tab() before we
enter an error condition in the probe function.
nokia_bind_config() tries to clean up which is IMHO the right thing to
do. Leaving things as-is and hoping that its unbind() will clean it up
is kinda backwards. Especially since the bind function never succeeded so
it can't know how much it needs to clean up.
This fixes the behaviour by not calling the driver's unbind function if
its bind function failed.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2013-01-21 20:52:37 +02:00
..
acm_ms.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
amd5536udc.c usb: gadget: remove global variable composite in composite.c 2012-09-10 15:35:41 +03:00
amd5536udc.h usb: gadget: Update amd5536udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:52 +03:00
at91_udc.c USB: gadget: at91_adc: fix pullup pin validity check 2013-01-10 12:41:01 +02:00
at91_udc.h usb: gadget: Update at91_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:53 +03:00
atmel_usba_udc.c arm: at91: move platfarm_data to include/linux/platform_data/atmel.h 2012-11-06 20:29:33 +08:00
atmel_usba_udc.h usb: gadget: Update atmel_usba_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:53 +03:00
audio.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
bcm63xx_udc.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
cdc2.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
composite.c usb: gadget: composite: don't call driver's unbind() if bind() failed 2013-01-21 20:52:37 +02:00
config.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
dbgp.c usb: gadget: libcomposite: add epautoconf.c to libcomposite 2012-09-10 15:37:51 +03:00
dummy_hcd.c usb: gadget: dummy_hcd: remove global the_controller variable 2012-10-31 15:18:01 +02:00
epautoconf.c usb: gadget: libcomposite: add epautoconf.c to libcomposite 2012-09-10 15:37:51 +03:00
ether.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
f_acm.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_ecm.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_eem.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_fs.c usb: gadget: FunctionFS: Use kstrtoul() 2013-01-10 12:42:14 +02:00
f_hid.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_loopback.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_mass_storage.c usb: gadget: mass_storage: remove >= 0 check for unsigned type 2013-01-10 12:36:47 +02:00
f_midi.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_ncm.c usb: gadget: ncm: make global variable ndp*_opts read only 2013-01-10 12:25:12 +02:00
f_obex.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_phonet.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_rndis.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_serial.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_sourcesink.c usb: gadget zero: avoid unnecessary reinit of data in f_sourcesink 2013-01-10 12:39:41 +02:00
f_subset.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_uac1.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
f_uac2.c usb: gadget: remove unused variable in uac2_pcm_trigger() 2013-01-10 12:35:47 +02:00
f_uvc.c usb: gadget: let f_* use usb_string_ids_tab() where it makes sense 2012-10-31 15:11:47 +02:00
f_uvc.h usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
fsl_mxc_udc.c usb: gadget: fsl_mxc_udc: do not depend on grouped clocks 2012-06-22 13:09:52 +03:00
fsl_qe_udc.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
fsl_qe_udc.h usb: gadget: Complete fsl qe/udc driver conversion 2012-06-12 13:32:29 +03:00
fsl_udc_core.c usb: fix typo in drivers/usb 2012-11-06 15:04:14 +02:00
fsl_usb2_udc.h usb: gadget: regression fix - usage of usb_ep 2012-06-04 18:24:49 +03:00
fusb300_udc.c usb: gadget: remove global variable composite in composite.c 2012-09-10 15:35:41 +03:00
fusb300_udc.h usb: gadget: Update fusb300_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:55 +03:00
g_ffs.c usb: gadget: libcomposite: move composite.c into libcomposite 2012-09-10 16:13:03 +03:00
g_zero.h usb: gadget: add isochronous support to gadget zero 2012-05-04 15:53:08 +03:00
gadget_chips.h usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
gmidi.c usb: gadget: consider link speed for bMaxPower 2013-01-10 12:38:52 +02:00
goku_udc.c usb: gadget: remove global variable composite in composite.c 2012-09-10 15:35:41 +03:00
goku_udc.h usb: gadget: Update goku_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:55 +03:00
hid.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
imx_udc.c ARM: imx: move platform_data definitions 2012-09-14 11:17:21 +02:00
imx_udc.h
inode.c usb: gadget: remove DMA_ADDR_INVALID from f_uac2 and gadgetfs 2012-10-31 15:10:06 +02:00
Kconfig usb: gadget: patches for v3.8 2012-11-11 17:31:53 -08:00
lpc32xx_udc.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
m66592-udc.c usb: gadget: remove global variable composite in composite.c 2012-09-10 15:35:41 +03:00
m66592-udc.h gadget/m66592: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
Makefile usb: gadget: Remove File-backed Storage Gadget (g_file_storage). 2012-11-08 16:01:04 +02:00
mass_storage.c usb: gadget: libcomposite: move composite.c into libcomposite 2012-09-10 16:13:03 +03:00
multi.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
mv_u3d_core.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
mv_u3d.h usb: gadget: mv: Add USB 3.0 device driver for Marvell PXA2128 chip. 2012-06-22 13:08:21 +03:00
mv_udc_core.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
mv_udc.h usb: gadget: Update mv_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:57 +03:00
ncm.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00
ndis.h usb/net: rndis: break out <linux/rndis.h> defines 2012-05-12 15:02:22 -04:00
net2272.c usb: remove use of __devexit 2012-11-21 13:27:17 -08:00
net2272.h
net2280.c usb: gadget: Remove File-backed Storage Gadget (g_file_storage). 2012-11-08 16:01:04 +02:00
net2280.h
nokia.c usb: gadget: consider link speed for bMaxPower 2013-01-10 12:38:52 +02:00
omap_udc.c ARM: arm-soc: power management and clock changes 2012-12-13 10:58:20 -08:00
omap_udc.h usb: gadget: Update omap_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:57 +03:00
pch_udc.c usb: gadget: remove global variable composite in composite.c 2012-09-10 15:35:41 +03:00
printer.c usb: gadget: always update HS/SS descriptors and create a copy of them 2012-10-31 15:09:44 +02:00
pxa25x_udc.c ARM: move udc_pxa2xx.h to linux/platform_data 2012-11-16 11:35:30 +00:00
pxa25x_udc.h usb: gadget: pxa25x: make it compile with debug again 2012-09-10 15:35:58 +03:00
pxa27x_udc.c ARM: soc: multiplatform enablement 2012-10-01 19:11:38 -07:00
pxa27x_udc.h usb: gadget: Remove File-backed Storage Gadget (g_file_storage). 2012-11-08 16:01:04 +02:00
r8a66597-udc.c gadget/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
r8a66597-udc.h gadget/r8a66597: remove conditional compilation of clk code 2012-07-30 17:25:12 -07:00
rndis.c usb: gadget: use native print_hex_dump_bytes() 2012-08-23 11:04:18 +03:00
rndis.h usb/net: rndis: break out <linux/rndis.h> defines 2012-05-12 15:02:22 -04:00
s3c2410_udc.c ARM: soc: multiplatform enablement 2012-10-01 19:11:38 -07:00
s3c2410_udc.h usb: gadget: Update s3c2410_udc to use usb_endpoint_descriptor inside the struct usb_ep 2012-05-04 15:52:59 +03:00
s3c-hsotg.c usb: gadget: s3c-hsotg: Use devm_regulator_bulk_get API 2013-01-10 12:41:56 +02:00
s3c-hsotg.h usb:hsotg:samsung: Remove the S3C_ prefix from registers definition. 2012-05-04 15:53:17 +03:00
s3c-hsudc.c usb: gadget: s3c-hsudc: Use devm_regulator_bulk_get 2013-01-10 12:41:37 +02:00
serial.c usb: gadget serial: don't shift bcd version left by 16 2012-09-10 20:04:20 +03:00
storage_common.c usb: gadget: file_storage: remove its last pieces 2013-01-10 12:24:30 +02:00
tcm_usb_gadget.c treewide: fix printk typo in multiple drivers 2012-11-19 11:08:17 +01:00
tcm_usb_gadget.h usb: gadget: make sure each gadget is using same index for Product, Serial,… 2012-09-10 16:13:00 +03:00
u_ether.c usb: gadget: g_ether: fix frame size check 2012-11-08 16:04:50 +02:00
u_ether.h usb: gadget: f_rndis: Set rndis vendor parameters 2012-05-10 12:27:58 -07:00
u_phonet.h
u_serial.c TTY: call tty_port_destroy in the rest of drivers 2012-11-15 17:20:58 -08:00
u_serial.h
u_uac1.c gadgetfs: clean up 2012-07-29 21:24:21 +04:00
u_uac1.h usb: gadget: Rename audio function to uac1 2012-02-15 10:09:48 +02:00
udc-core.c usb: gadget: Remove reference to is_dualspeed from sysfs. 2012-11-08 16:04:34 +02:00
usbstring.c usb: gadget: libcomposite: move MODULE_VERSION to composite.c 2012-09-10 16:13:03 +03:00
uvc_queue.c [media] usb: gadget/uvc: Remove non-required locking from 'uvc_queue_next_buffer' routine 2012-04-10 15:46:02 -03:00
uvc_queue.h
uvc_v4l2.c Merge remote-tracking branch 'linus/master' into staging/for_v3.5 2012-05-15 08:39:25 -03:00
uvc_video.c
uvc.h usb: gadget: uvc: Add super-speed support to UVC webcam gadget 2012-06-04 18:12:36 +03:00
webcam.c usb: gadget: consider link speed for bMaxPower 2013-01-10 12:38:52 +02:00
zero.c usb: gadget: remove usb_gadget_controller_number() 2012-09-10 16:43:24 +03:00