aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/function
diff options
context:
space:
mode:
authorAndrzej Pietrasiewicz <andrzej.p@samsung.com>2014-10-16 07:33:26 -0400
committerFelipe Balbi <balbi@ti.com>2014-11-05 14:36:05 -0500
commitd23b4c3ee2d5cbdeaec9f8e7d8a9bdcc73836fb9 (patch)
treee12ed1da81a3977cd865ab428baad52075a83089 /drivers/usb/gadget/function
parent6e58ed578e2c65442b7a02deecc96e482c701654 (diff)
usb: gadget: f_midi: check kstrdup() return value
kstrdup() might fail, so check its return value and react appropriately. Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget/function')
-rw-r--r--drivers/usb/gadget/function/f_midi.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index bf329578c957..a920eee9e878 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -654,6 +654,14 @@ static struct snd_rawmidi_ops gmidi_out_ops = {
654 .trigger = f_midi_out_trigger 654 .trigger = f_midi_out_trigger
655}; 655};
656 656
657static inline void f_midi_unregister_card(struct f_midi *midi)
658{
659 if (midi->card) {
660 snd_card_free(midi->card);
661 midi->card = NULL;
662 }
663}
664
657/* register as a sound "card" */ 665/* register as a sound "card" */
658static int f_midi_register_card(struct f_midi *midi) 666static int f_midi_register_card(struct f_midi *midi)
659{ 667{
@@ -715,10 +723,7 @@ static int f_midi_register_card(struct f_midi *midi)
715 return 0; 723 return 0;
716 724
717fail: 725fail:
718 if (midi->card) { 726 f_midi_unregister_card(midi);
719 snd_card_free(midi->card);
720 midi->card = NULL;
721 }
722 return err; 727 return err;
723} 728}
724 729
@@ -967,15 +972,23 @@ int __init f_midi_bind_config(struct usb_configuration *c,
967 midi->func.disable = f_midi_disable; 972 midi->func.disable = f_midi_disable;
968 973
969 midi->id = kstrdup(id, GFP_KERNEL); 974 midi->id = kstrdup(id, GFP_KERNEL);
975 if (id && !midi->id) {
976 status = -ENOMEM;
977 goto kstrdup_fail;
978 }
970 midi->buflen = buflen; 979 midi->buflen = buflen;
971 midi->qlen = qlen; 980 midi->qlen = qlen;
972 981
973 status = usb_add_function(c, &midi->func); 982 status = usb_add_function(c, &midi->func);
974 if (status) 983 if (status)
975 goto setup_fail; 984 goto add_fail;
976 985
977 return 0; 986 return 0;
978 987
988add_fail:
989 kfree(midi->id);
990kstrdup_fail:
991 f_midi_unregister_card(midi);
979setup_fail: 992setup_fail:
980 for (--i; i >= 0; i--) 993 for (--i; i >= 0; i--)
981 kfree(midi->in_port[i]); 994 kfree(midi->in_port[i]);