  The Linux kernel extensively uses the Berkeley Packet Filter (BPF) to allow
user-written BPF applications to execute in the kernel space. The BPF employs a
verifier to check the security of user-supplied BPF code statically. Recent
attacks show that BPF programs can evade security checks and gain unauthorized
access to kernel memory, indicating that the verification process is not
flawless. In this paper, we present MOAT, a system that isolates potentially
malicious BPF programs using Intel Memory Protection Keys (MPK). Enforcing BPF
program isolation with MPK is not straightforward; MOAT is designed to
alleviate technical obstacles, such as limited hardware keys and the need to
protect a wide variety of BPF helper functions. We implement MOAT on Linux
(ver. 6.1.38), and our evaluation shows that MOAT delivers low-cost isolation
of BPF programs under mainstream use cases, such as isolating a BPF packet
filter with only 3% throughput loss.
