Commit d23b4c3e authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Felipe Balbi

usb: gadget: f_midi: check kstrdup() return value

kstrdup() might fail, so check its return value and react appropriately.
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 6e58ed57
...@@ -654,6 +654,14 @@ static struct snd_rawmidi_ops gmidi_out_ops = { ...@@ -654,6 +654,14 @@ static struct snd_rawmidi_ops gmidi_out_ops = {
.trigger = f_midi_out_trigger .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" */ /* register as a sound "card" */
static int f_midi_register_card(struct f_midi *midi) static int f_midi_register_card(struct f_midi *midi)
{ {
...@@ -715,10 +723,7 @@ static int f_midi_register_card(struct f_midi *midi) ...@@ -715,10 +723,7 @@ static int f_midi_register_card(struct f_midi *midi)
return 0; return 0;
fail: fail:
if (midi->card) { f_midi_unregister_card(midi);
snd_card_free(midi->card);
midi->card = NULL;
}
return err; return err;
} }
...@@ -967,15 +972,23 @@ int __init f_midi_bind_config(struct usb_configuration *c, ...@@ -967,15 +972,23 @@ int __init f_midi_bind_config(struct usb_configuration *c,
midi->func.disable = f_midi_disable; midi->func.disable = f_midi_disable;
midi->id = kstrdup(id, GFP_KERNEL); midi->id = kstrdup(id, GFP_KERNEL);
if (id && !midi->id) {
status = -ENOMEM;
goto kstrdup_fail;
}
midi->buflen = buflen; midi->buflen = buflen;
midi->qlen = qlen; midi->qlen = qlen;
status = usb_add_function(c, &midi->func); status = usb_add_function(c, &midi->func);
if (status) if (status)
goto setup_fail; goto add_fail;
return 0; return 0;
add_fail:
kfree(midi->id);
kstrdup_fail:
f_midi_unregister_card(midi);
setup_fail: setup_fail:
for (--i; i >= 0; i--) for (--i; i >= 0; i--)
kfree(midi->in_port[i]); kfree(midi->in_port[i]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment