Подробности

[В начало]

Проблема в реализации № L0116

Краткое описание

drivers/net/wireless/ath/ath9k/hif_usb.c: гонка между функцией обработчиком request_firmware_nowait() и suspend()

Подробное описание

ath9k_hif_usb_probe() запрашивает встроенную программу асинхронно и часть инициализации откладывается до того момента, когда встроенная программа будет готова. В частности, функция обработчик ath9k_hif_usb_firmware_cb() инициализирует списки hif_dev->tx.tx_buf и hif_dev->tx.tx_pending.
В то же самое время ath9k_hif_usb_suspend() итерирует эти списки, вызывая ath9k_hif_usb_dealloc_urbs(). Если приостановка происходит до того, как функция обработчик request_firmware_nowait() была вызвана, это может привести к oops.
Аналогичная проблема могла бы быть в ath9k_hif_usb_disconnect(), но она предотвращается благодаря использованию флагов hif_dev->fw_done completion и HIF_USB_READY.

Компонент

linux-kernel 3.10

Принято

https://lkml.org/lkml/2013/7/1/520
commit

Статус

Исправлено в ядре 3.11-rc2

[В начало]