Я использую пользовательскую плату с процессором Freescale P1010 и Marvell 88E1512 PHY для Ethernet, которая работает на ядре Linux 3.18.9-rt4;
При выполнении тестов Cyber Security с использованием Achilles-box мы обнаружилинекоторые проблемы с IP Multicast Storm (генерирует идентичные, действительные IP-пакеты и группирует их по каналу с определенной скоростью) и UDP Broadcast Storm (генерирует идентичные, действительные UDP-пакеты и транслирует их по каналу с определенной скоростью), поэтомузаметил, что при указанной выше пороговой скорости (выше 90 Мбит / с) порты TCP и UDP вышли из строя, и требуется принудительная перезагрузка, чтобы вернуть их в нормальное состояние.
Сразу после запуска широковещательного шторма появляется сообщение
NOHZ: local_softirq_pending 102
появляется на консоли 10 раз.Причина, по которой это «только» появляется 10 раз, заключается в том, что ядро ограничивает число раз, когда оно пишет это сообщение, до 10.
Примерно через 11 секунд после первого
NOHZ: local_softirq_pending 102
страницысообщается о сбое распределения.Это означает, что системная память исчерпана.Анализ стека вызовов показывает, что это драйвер (drivers/net/ethernet/freescale/gianfar.c and net/core/skbuff.c)
для порта Ethernet, точнее задача soft-irq, которая обрабатывает входящие кадры, которая не может получить больше памяти для приема буферов.До начала широковещательного шторма доступно более 200 МБ свободной памяти, и все это исчезло за 11 секунд.Это делает систему неспособной продолжать нормальную работу даже после прекращения широковещательного шторма.
Кажется, что слабое место в том, как Linux обрабатывает входящие кадры Ethernet, делает его уязвимым для штормовых атак, когда используется вся доступная память,оставив систему в нестабильном состоянии после завершения атаки.
Может кто-нибудь сталкивался с подобной проблемой и кто-нибудь знает, как исправить / предложить, чтобы выяснить, почему широковещательный / многоадресный шторм способен потреблятьпочти вся мощность процессора процессора P1010.