[lvc-project] [PATCH v2] media: usb: hackrf: fix device unregister order in hackrf_probe()

Fedor Pchelkin pchelkin at ispras.ru
Wed Feb 19 13:59:36 MSK 2025


On Tue, 18. Feb 08:56, Жандарович Никита Игоревич wrote:
> >-----Original Message-----
> >From: Fedor Pchelkin [mailto:pchelkin at ispras.ru]
> >On Mon, 17. Feb 16:29, Жандарович Никита Игоревич wrote:
> >> Добрый вечер, Фёдор.
> >>
> >> 100% уверенности в корректности решения у меня нет. Но после
> >Ну, в описании не сказано, почему порядок разрегистрации на пути
> >ошибки probe-функции сделан неправильно и как это связано с
> >репортом KASAN. Я бы не сказал, что это очевидно читателю патча.
> >Скорее всего, в её отсутствие в описании патча ему придётся
> >дополнительно лезть в исходные тексты ядра и самостоятельно
> >выискивать нужную информацию.
> >
> 
> Согласен, на момент оформления патча этот момент мне казался более
> очевидным, чем следовало. Постараюсь быть чуть более подробным в
> описании проблемы и ее решения.

Изменение порядка вызова фукнций - это ключевой момент патча. Отсутствие
100%-ной уверенности в корректности решения и в то же время очевидность
с Ваших слов ключевого момента патча как-то не соотносятся друг с другом.

На текущий момент порядок разрегистрации и освобождения объектов
выполнен в обратном порядке процессу их инициализации. То есть на первый
взгляд порядок выглядит логично. Поэтому непонятно, каким образом
проблема, выявленная санитайзером, в целом связана с тем, что делает патч.
Может есть какая-то более глубинная информация?

v4l2_ctrl_handler_init(&dev->rx_ctrl_handler, 5)
...
if (dev->rx_ctrl_handler.error) {
	ret = dev->rx_ctrl_handler.error;
	dev_err(dev->dev, "Could not initialize controls\n");
	goto err_v4l2_ctrl_handler_free_rx;
}
...
v4l2_ctrl_handler_init(&dev->tx_ctrl_handler, 4);
if (dev->tx_ctrl_handler.error) {
	ret = dev->tx_ctrl_handler.error;
	dev_err(dev->dev, "Could not initialize controls\n");
	goto err_v4l2_ctrl_handler_free_tx;
}
...
ret = v4l2_device_register(&intf->dev, &dev->v4l2_dev);
if (ret) {
	dev_err(dev->dev, "Failed to register v4l2-device (%d)\n", ret);
	goto err_v4l2_ctrl_handler_free_tx;
}
...
ret = video_register_device(&dev->rx_vdev, VFL_TYPE_SDR, -1);
if (ret) {
	dev_err(dev->dev,
		"Failed to register as video device (%d)\n", ret);
	goto err_v4l2_device_unregister;
}
...
err_v4l2_device_unregister:
	v4l2_device_unregister(&dev->v4l2_dev);
err_v4l2_ctrl_handler_free_tx:
	v4l2_ctrl_handler_free(&dev->tx_ctrl_handler);
err_v4l2_ctrl_handler_free_rx:
	v4l2_ctrl_handler_free(&dev->rx_ctrl_handler);



More information about the lvc-project mailing list