Цитата — «много интересного текста до этого момента о C++ и динамических массивах… Даже если компилятор вдруг решит заняться контролем границ массива (одно дополнительное обращение к памяти и три-четыре машинных команды), это не решит проблемы, поскольку при обнаружении переполнения откомпилированная программа не сможет сделать ничего умнее, чем аварийно завершить свое выполнение. Вызов исключения не предлагается, поскольку если программист забудет его обработать (а он наверняка забудет это сделать), мы получим атаку типа отказ в обслуживании. Конечно, это не захват системы, но все равно нехорошо.
Одна тонкость — в данном случае язык C. При большом желании можно таки ошибки обрабатывать путём вменяемого прерывания обработки системного вызова с особождением всем памяти контекста. Вот если структура глобальная — тут сложнее, целую подсистему надо как-то погасить. Но и это, в принципе, возможно — лучше, чем ничего.
Есть USB over IP опенсорсный. И он даже работает. И даже под OpenWRT.
Только в нем отсутствуют методы аутентификации и защиты. И подразумевается что вы его используете в защищенной сети.
Уязвимость в KCodes NetUSB в роутерах D-Link, NETGEAR, TP-LINK, Trendnet, ZyXEL и других