Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+18 −5
Original line number Original line Diff line number Diff line
@@ -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)
	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,
	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]);