挑战:在可编程数据包处理的嵌入式系统中查找错误
Gauntlet: Finding Bugs in Compilers for Programmable Packet Processing
摘要:
可编程数据包处理设备,如可编程交换机和网络接口卡正在成为主流。这些设备以特定于域的语言(如P4)进行配置,使用编译器将数据包处理程序转换为针对不同目标的指令。随着带有可编程设备的网络的普及,这些编译器的可靠性至关重要。本文考虑在P4-16的上下文中查找用于数据包处理的编译器中的错误的问题。我们引入特定领域的技术,以诱导异常终止的编译器(崩溃错误)和误编译(语义错误)。我们将这些技术应用于(1)开源P4编译器(P4 C)基础设施,它作为不同P4后端的公共基础;(2)P4参考软件交换机的P4后端;以及(3)Barefoot Tofino交换机的P4后端。在3个平台上,经过8个月的bug发现,我们的工具Gauntlet检测到96个新的和不同的bug(62个崩溃和34个语义),我们与各自的编译器开发人员确认了这些bug。54个已经修复(31个崩溃和23个语义);其余的已经分配给开发人员。我们的bug查找工作还导致了6个P4规范的更改。我们在p4gauntlet.github.io上开源了Gauntlet,它现在在P4 C的持续集成管道中运行。
英文摘要:
Programmable packet-processing devices such as programmable switches and network interface cards are becoming mainstream. These devices are configured in a domain-specific language such as P4, using a compiler to translate packet-processing programs into instructions for different targets. As networks with programmable devices become widespread, it is critical that these compilers be dependable. This paper considers the problem of finding bugs in compilers for packet processing in the context of P4-16. We introduce domain-specific techniques to induce both abnormal termination of the compiler (crash bugs) and miscompilation (semantic bugs). We apply these techniques to (1) the open-source P4 compiler (P4C) infrastructure, which serves as a common base for different P4 back ends; (2) the P4 back end for the P4 reference software switch; and (3) the P4 back end for the Barefoot Tofino switch. Across the 3 platforms, over 8 months of bug finding, our tool Gauntlet detected 96 new and distinct bugs (62 crash and 34 semantic), which we confirmed with the respective compiler developers. 54 have been fixed (31 crash and 23 semantic); the remaining have been assigned to a developer. Our bug-finding efforts also led to 6 P4 specification changes. We have open sourced Gauntlet at p4gauntlet.github.io and it now runs within P4C's continuous integration pipeline.
机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。