Skip to content

Commit

Permalink
usb: gadget: f_midi: check kstrdup() return value
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andrzej Pietrasiewicz authored and Felipe Balbi committed Nov 5, 2014
1 parent 6e58ed5 commit d23b4c3
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions drivers/usb/gadget/function/f_midi.c
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,14 @@ static struct snd_rawmidi_ops gmidi_out_ops = {
.trigger = f_midi_out_trigger
};

static inline void f_midi_unregister_card(struct f_midi *midi)
{
if (midi->card) {
snd_card_free(midi->card);
midi->card = NULL;
}
}

/* register as a sound "card" */
static int f_midi_register_card(struct f_midi *midi)
{
Expand Down Expand Up @@ -715,10 +723,7 @@ static int f_midi_register_card(struct f_midi *midi)
return 0;

fail:
if (midi->card) {
snd_card_free(midi->card);
midi->card = NULL;
}
f_midi_unregister_card(midi);
return err;
}

Expand Down Expand Up @@ -967,15 +972,23 @@ int __init f_midi_bind_config(struct usb_configuration *c,
midi->func.disable = f_midi_disable;

midi->id = kstrdup(id, GFP_KERNEL);
if (id && !midi->id) {
status = -ENOMEM;
goto kstrdup_fail;
}
midi->buflen = buflen;
midi->qlen = qlen;

status = usb_add_function(c, &midi->func);
if (status)
goto setup_fail;
goto add_fail;

return 0;

add_fail:
kfree(midi->id);
kstrdup_fail:
f_midi_unregister_card(midi);
setup_fail:
for (--i; i >= 0; i--)
kfree(midi->in_port[i]);
Expand Down

0 comments on commit d23b4c3

Please sign in to comment.