具有Linux 3.18.9-rt4内核的P1010和Marvell 88E1512 PHY上的UDP广播/ IP组播风暴问题

时间:2018-10-01 09:11:08

标签: linux-kernel linux-device-driver embedded-linux ethernet powerpc

我使用的是带有Freescale P1010处理器和Marvell 88E1512 PHY的定制板,用于以太网,该板运行在Linux 3.18.9-rt4内核上;

在使用Achilles-box执行网络安全测试时,我们发现了IP多播风暴(生成相同的有效IP数据包并以特定速率通过链接对其进行多播)和UDP广播风暴(生成相同的有效UDP)的某些问题数据包并以特定速率通过链路广播它们),因此可以观察到,高于阈值速率(高于90Mbps),TCP和UDP端口出现故障,需要硬重启才能使其恢复正常状态。 / p>

广播风暴立即开始后,消息

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),更确切地说是处理输入帧的soft-irq任务,无法获得更多的内存来接收缓冲区。在广播风暴开始之前,有超过200MB的可用内存,所有这些在11秒内消失了。即使在广播风暴停止后,这也使系统无法继续正常运行。

Linux在处理传入的以太网帧方面似乎存在一个弱点,使其容易受到风暴攻击的攻击,该风暴攻击消耗了所有可用内存,攻击结束后系统处于不稳定状态。

任何人都可能遇到过类似的问题,是否有人知道如何解决/建议以找出广播/多播风暴为何能够消耗P1010处理器几乎所有的CPU功能。

0 个答案:

没有答案