Представитель Шуры Люберецкого в ЖЖ (brat_luber) wrote,
Представитель Шуры Люберецкого в ЖЖ
brat_luber

Category:

Делайте ставки, господа

Продолжаю тут развлекаться с LoRaWAN, и нашел просто невъебеннейшую ошибку в RIOT – точнее, в промежуточном слое между операционкой и “эталонной” LoRaMAC-Node. Ошибка там пряталась довольно давно, но то ли никто не обращал внимания, то ли списывали на “редкие разовые глюки” – в конце концов, возникала она только при довольно активном обмене в сети (хотя в принципе возможна и “на столе”).

Дело в том, что в одной из функций этого промежуточного слоя никто не обратил внимания на то, что драйвер трансивера SX1276/77/78 иногда может вернуть при вызове recv() отрицательное значение, сигнализирующее об ошибке – и радостно записывали то, что он возвращает, в переменную типа size_t – а дальше при попытке прочитать почти 4 гигабайта все радостно валилось с затиранием немалой части памяти и невнятным сообщением об ошибке.

Видимо, по “закону парных случаев” кто-то увидел такое поведение два месяца назад – но все эти два месяца разработчики “линукса для интернета вещей” мяли сиськи:

https://github.com/RIOT-OS/RIOT/issues/14962

Я, в отличие от них, был прямо заинтересован в исправлении ошибки – и сделал это, поправив буквально пару строк кода:

https://github.com/RIOT-OS/RIOT/pull/15355

Ошибка, тем временем, довольно критичная – она может полностью вывести из строя любое устройство, использующее встроенную в RIOT реализацию LoRaWAN. Вдвойне критично то, что альтернативного варианта стека LoRaWAN в RIOT не было примерно до конца прошлого года – и то назвать его полностью пригодным к работе сложно, скажем, полноценной поддержки “региональных параметров” там в официальной версии пока не просматривается. В сухом итоге – негодяю-хакеру достаточно просто послать вашему устройству в нужный момент специально сформированный пакет (подозреваю, что соорудить его можно практически штатными средствами), чтобы оно выпало в HardFault.

С другой стороны, зная отношение авторов RIOT к присылаемым им багфиксам – вангую те же два месяца жевания соплей до каких-то осмысленных телодвижений в отношении моего pull-request. Впрочем, я со своей стороны все необходимое сделал, и даже поправил строчечку, чтобы не ругалась их система Continuous Integration. Буду дальше следить за происходящим.

А вы как думаете – примут или замнут? И не стоит ли закинуть в окрестностях FU Berlin и HAW Hamburg пару девайсиков, срущих в эфир пакетами с битой CRC?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Subscribe

  • Меморандум «Элитана» просто охуительный

    Читал и ржал местами: https://www.elitan.ru/pravilanew/upd.html Говорят, личное творчество их гендира Алексея Досова. В связи с этим —…

  • Китайцы жгут

    Мало нам двух вариантов ST-Link в формате USB-свистка (с несовместимым назначением выводов) — так они еще умудрились нарисовать картиночку,…

  • Вечер в хату

    Снова словил бан по IP в ЖЖ (ну это давно было), снова разбанился, снова вывалил кучку постов за месяц :) Запись опубликована в блоге Шуры…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments