Произошла ошибка ядра (Kernel Oops) в hci_send_acl() в Linux.

Вопрос или проблема

Я работаю над встроенной системой Linux (kernel-5.10.150), в системе есть модуль bluetooth+WIFI.

В ходе тестирования wifi+BT я обнаружил ошибку ядра oops, как показано ниже:

[  101.717826] CPU 0 Не удалось обработать запрос на страничный доступ ядра по виртуальному адресу 000002d4, epc == 805be290, ra == 805be560
[  101.717838] Ошибка[#1]:
[  101.717851] CPU: 0 PID: 1763 Команда: bttest Не испорчено 5.10.150 #4
[  101.717858] $ 0   : 00000000 00000001 00000010 a8be6d21
[  101.717894] $ 4   : a8be6d21 00000001 81015fa0 005f5000
[  101.717919] $ 8   : 00000000 00000000 05355555 00000000
[  101.717943] $12   : ffffffff 00000000 ffffffea 00000000
[  101.717969] $16   : 8166f000 00000000 8224dd80 00000000
[  101.717995] $20   : 00000000 00000019 81c2f308 81e11020
[  101.718023] $24   : 00000000 8001190c
[  101.718043] $28   : 8224c000 8224dc88 82134380 805be560
[  101.718061] Hi    : 02f5db53
[  101.718066] Lo    : 24a9f11c
[  101.718084] epc   : 805be290 hci_send_acl+0xa0/0x43c
[  101.718093] ra    : 805be560 hci_send_acl+0x370/0x43c
[  101.718098] Статус: 34001c03 KERNEL EXL IE
[  101.718115] Причина : 00800008 (ExcCode 02)
[  101.718119] BadVA : 000002d4
[  101.718124] PrId  : 00132000 (MiPs)
[  101.718129] Загруженные модули:
[  101.718142] Процесс bttest (pid: 1763, threadinfo=58765d16, task=15407a97, tls=6f9fd920)
[  101.718147] Стек : 8224ddf0 8166f3c8 00000001 8224dae0 80820000 805e2944 82189c00 00000019
[  101.718175]         8224dd80 8224dd78 00000000 00000019 81c2f308 821f1900 81e11020 805e7b48
[  101.718203]         8224dd08 82189c00 00000019 81d8b0f0 8224dd80 a8be6d21 80bfcc00 81c9d400
[  101.718229]         80990000 805b5298 80990000 81c9d400 a8be6d21 00000001 00000000 6f9f5d28
[  101.718256]         00000000 a8be6d21 82189e04 00000000 8224dd78 00000019 82189c00 00000001
[  101.718281]         ...
[  101.718292] Вызов трассы:
[  101.718301] [<805be290>] hci_send_acl+0xa0/0x43c
[  101.718315] [<805e7b48>] l2cap_chan_send+0x1f4/0xf34
[  101.718325] [<805f30d0>] l2cap_sock_sendmsg+0xac/0x11c
[  101.718333] [<804bd550>] sock_write_iter+0xc8/0x14c
[  101.718344] [<80130544>] do_iter_readv_writev+0x1c8/0x1ec
[  101.718351] [<80131920>] do_iter_write+0xb0/0x1f8
[  101.718358] [<80131b08>] vfs_writev+0x80/0x280
[  101.718365] [<80131d80>] do_writev+0x78/0x134
[  101.718375] [<8002a2f8>] syscall_common+0x34/0x58
[  101.718382]
[  101.718387] Код: 2c441000  148000a5  3c048090 <8c5402c4> 2e821000  144000c8  3c048090  02203825  03c03025
[  101.718422]
[  101.718538] ---[ конец трассы 87e7cd85f44c4db0 ]---

Я думаю, должна быть ошибка use-after-free в кодах BT ядра, и я нашел следующие ссылки, похожие на эту Oops.
https://bugzilla.kernel.org/show_bug.cgi?id=216686
— Я действительно нашел исправление этой ошибки.
И,
https://groups.google.com/g/syzkaller-bugs/c/SH1vfz5mhtA/m/_nzs-IpaAwAJ
— Похоже, использовалась другая версия ядра, и я не уверен, было ли какое-либо обратное портирование исправления в kernel-5.10, я не знаю много о BT и не знаю, как получить исправления из этой ссылки.
Есть ли какой-либо официальный сайт bluetooth-next, где я могу найти все коммиты для исправления этой проблемы?

Так как же мне исправить эту проблему Oops в моей системе?

Ответ или решение

Решение проблемы Kernel Oops в hci_send_acl() для системы Linux

Ваша проблема, связанная с возникновением ядрового «Oops» в функции hci_send_acl(), может говорить о наличии критической ошибки в работе Bluetooth стека в вашей системе на базе Linux (ядро 5.10.150). Давайте рассмотрим, что может вызвать эту ошибку и как вы можете её устранить.

Анализ ошибки

Сообщение, которое вы предоставили, указывает на ошибку, связанная с нарушением доступа к памяти, вероятно из-за use-after-free. Строка Unable to handle kernel paging request at virtual address 000002d4 указывает на то, что процесс попытался обратиться к несуществующей или освобождённой памяти. Это может происходить в результате неправильного управления памятью в стеке Bluetooth.

Вы упомянули несколько ссылок на похожие проблемы, что подтверждает, что вы не одиноки в данном вопросе. Лучше всего, что вы уже сделали — это проверить наличие известных фиксированных патчей для вашего ядра.

Поиск исправлений

  1. Патчи и исправления: Чтобы найти официальные исправления для вашей версии ядра, вам стоит исследовать ссылки, которые вы указали. Кроме того, рекомендуется посетить официальный репозиторий Linux на Git, где можно найти ветвь bluetooth-next, которая обычно содержит последние обновления и исправления для Bluetooth.

  2. Обновление ядра: Если исправление было добавлено в более поздние версии ядра, одним из лучших решений будет обновление до более новой стабильной версии, которая включает необходимые вам исправления. Проверка changelog и коммитов может помочь выявить, включает ли новая версия необходимые исправления.

  3. Бекпортирование: Если вы не можете обновить ядро до более новой версии, вы можете рассмотреть возможность бэктестирования исправления с использованием исходного кода, содержащего патч. Однако это потребует определенных навыков программирования и понимания структуры кодовой базы ядра.

Действия для устранения ошибки

  1. Сборка и установка обновлений:

    • Определите, в какую версию ядра были добавлены исправления, и загрузите их.
    • Скомпилируйте и установите ядро на вашей системе, следуя стандартным процедурам.
  2. Проверка и тестирование:

    • Запустите тесты для проверки, устранена ли ошибка.
    • Используйте инструменты мониторинга, чтобы отслеживать изменения в работе системы.
  3. Поддержка сообщества:

    • Если ошибки продолжаются, обязательно обратитесь в المجتمع разработчиков. Подробное описание вашей проблемы и предоставленные логи помогут другим участникам сообщества дать вам рекомендации.

Заключение

Выявление и устранение ошибок, таких как Kernel Oops в hci_send_acl(), требует настойчивости и внимательности. Сосредоточьтесь на обновлении ядра и поиске исправлений в официальных источниках. Успехов в вашей работе над проблемой со стабильностью Bluetooth на вашей системе!

Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью на профессиональных форумах или в сообществах Linux.

Оцените материал
Добавить комментарий

Капча загружается...