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

Commit 3333447c authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by Mauro Carvalho Chehab
Browse files

[media] tlg2300: implement error handling in poseidon_probe()



All poseidon init functions properly return error codes,
but they are ignored by poseidon_probe(). The patch implements
handling of error cases.
Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 725d7b71
Loading
Loading
Loading
Loading
+24 −3
Original line number Diff line number Diff line
@@ -436,12 +436,22 @@ static int poseidon_probe(struct usb_interface *interface,

		/* register v4l2 device */
		ret = v4l2_device_register(&interface->dev, &pd->v4l2_dev);
		if (ret)
			goto err_v4l2;

		/* register devices in directory /dev */
		ret = pd_video_init(pd);
		poseidon_audio_init(pd);
		poseidon_fm_init(pd);
		pd_dvb_usb_device_init(pd);
		if (ret)
			goto err_video;
		ret = poseidon_audio_init(pd);
		if (ret)
			goto err_audio;
		ret = poseidon_fm_init(pd);
		if (ret)
			goto err_fm;
		ret = pd_dvb_usb_device_init(pd);
		if (ret)
			goto err_dvb;

		INIT_LIST_HEAD(&pd->device_list);
		list_add_tail(&pd->device_list, &pd_device_list);
@@ -459,6 +469,17 @@ static int poseidon_probe(struct usb_interface *interface,
	}
#endif
	return 0;
err_dvb:
	poseidon_fm_exit(pd);
err_fm:
	poseidon_audio_free(pd);
err_audio:
	pd_video_exit(pd);
err_video:
	v4l2_device_unregister(&pd->v4l2_dev);
err_v4l2:
	kfree(pd);
	return ret;
}

static void poseidon_disconnect(struct usb_interface *interface)