October 31st, 2020

Бритоголовый и С1-97

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

Продолжаю тут развлекаться с 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).

Бритоголовый и С1-97

Но вообще сегодня же Хеллоуин

Так что надо бы переписать предыдущую запись в немного более страшных тонах.

halloween-keyboard

Вот представьте себе, что вы, скажем, разработали какое-то устройство для модного “интернета вещей” – и поддавшись рекламе с какого-то очередного хакатона, сделали его на RiotOS с поддержкой LoRaWAN. Вам повезло, на волне хайпа ваше устройство установлено в десятках самых разных мест, произведено десятками тысяч экземпляров – и в один не очень хороший день ВНЕЗАПНО все эти десятки тысяч устройств начинают невообразимо глючить. В самом худшем случае – зависают через секунды после включения и подключения сети, в чуть более лучшем – то же самое происходит иногда, случайно.

Приятных вам сновидений – в которых мечта о собственном IoT-стартапе превращается в ужасный кошмар.

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