论文标题
Gauntlet:在编译器中查找可编程数据包处理的错误
Gauntlet: Finding Bugs in Compilers for Programmable Packet Processing
论文作者
论文摘要
可编程的数据包处理设备,例如可编程开关和网络接口卡正在成为主流。这些设备是用特定于域的语言(例如P4)配置的,使用编译器将数据包处理程序转换为不同目标的说明。随着具有可编程设备的网络变得广泛,至关重要的是这些编译器可靠。 本文考虑了在P4-16的背景下在编译器中查找用于数据包处理的错误的问题。我们介绍了特定领域的技术,以诱导编译器(崩溃)和不复杂性(语义错误)的异常终止。我们将这些技术应用于(1)开源P4编译器(P4C)基础架构,该基础架构是不同P4后端的共同基础; (2)P4参考软件开关的P4后端; (3)赤脚tofino开关的P4后端。 在这3个平台中,在8个月的发现中,我们的工具手套检测到了96个新的和不同的错误(62个崩溃和34个语义),我们向各自的编译器开发人员确认了这一点。 54已固定(31崩溃和23个语义);其余已分配给开发人员。我们的错误调查工作还导致了6个P4规范更改。我们在p4gauntlet.github.io上有开源的手套,现在它在P4C的连续集成管道中运行。
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.