В ядре Linux устранена следующая уязвимость:
Bluetooth: bpa10x: избегать внепланового чтения строки версии в bpa10x_setup()
bpa10x_setup() отправляет команду поставщика 0xfc0e и передает ответ
в bt_dev_info() и hci_set_fw_info() как строку «%s», начинающуюся с
skb->data + 1, без проверки длины:
bt_dev_info(hdev, "%s", (char *)(skb->data + 1));
hci_set_fw_info(hdev, "%s", skb->data + 1);
Устройство, возвращающее однобайтовый ответ (только статус), уходит
skb->data + 1 после конца данных, и проход %s читает соседние
слэбировать память до тех пор, пока она не встретит NUL. То же самое происходит, когда полезная нагрузка
не завершается NUL в пределах skb->len. Байты, выходящие за границы, попадают в
журнал ядра и файл debugfs с информацией о прошивке.
Напечатайте строку редакции с ограниченным "%.*s", ограниченным skb->len - 1. вместо этого. Это сохраняет строку читабельной для устройств с хорошим поведением, в то время как никогда не считывает полученные данные и не дает сбоев при настройке, поэтому устройство, возвращающее короткий или неопределенный ответ, продолжает работать.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: bpa10x: avoid OOB read of revision string in bpa10x_setup() bpa10x_setup() sends the vendor command 0xfc0e and passes the response to bt_dev_info() and hci_set_fw_info() as a "%s" string starting at skb->data + 1, without checking the length: bt_dev_info(hdev, "%s", (char *)(skb->data + 1)); hci_set_fw_info(hdev, "%s", skb->data + 1); A device that returns a one-byte response (status only) leaves skb->data + 1 past the end of the data, and the %s walk reads adjacent slab memory until it meets a NUL. The same happens when the payload is not NUL-terminated within skb->len. The out-of-bounds bytes end up in the kernel log and the firmware-info debugfs file. Print the revision string with a bounded "%.*s" limited to skb->len - 1 instead. This keeps the string readable for well-behaved devices while never reading past the received data, and does not fail setup, so a device returning a short or unterminated response keeps working.