Xi Wang 0005

dblp:08/5760-5 · DBLP profile ↗
← Back
30ranked-venue papers
6as first author
2since 2021 · last 2023
—ORCID · conflict

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 23 · 4 first-author · 2 since 2021Systems, architecture and hardware · 6 · 2 first-authorComputer networks · 2Theory of computation · 2
YearPublicationVenuePosition
2023 Synthesis-Aided Crash Consistency for Storage Systems
Jacob Van Geffen, Xi Wang 0005, Emina Torlak, James Bornholt
ECOOP2
2022 A formal foundation for symbolic evaluation with merging
abstract
Reusable symbolic evaluators are a key building block of solver-aided verification and synthesis tools. A reusable evaluator reduces the semantics of all paths in a program to logical constraints, and a client tool uses these constraints to formulate a satisfiability query that is discharged with SAT or SMT solvers. The correctness of the evaluator is critical to the soundness of the tool and the domain properties it aims to guarantee. Yet so far, the trust in these evaluators has been based on an ad-hoc foundation of testing and manual reasoning. This paper presents the first formal framework for reasoning about the behavior of reusable symbolic evaluators. We develop a new symbolic semantics for these evaluators that incorporates state merging. Symbolic evaluators use state merging to avoid path explosion and generate compact encodings. To accommodate a wide range of implementations, our semantics is parameterized by a symbolic factory, which abstracts away the details of merging and creation of symbolic values. The semantics targets a rich language that extends Core Scheme with assumptions and assertions, and thus supports branching, loops, and (first-class) procedures. The semantics is designed to support reusability, by guaranteeing two key properties: legality of the generated symbolic states, and the reducibility of symbolic evaluation to concrete evaluation. Legality makes it simpler for client tools to formulate queries, and reducibility enables testing of client tools on concrete inputs. We use the Lean theorem prover to mechanize our symbolic semantics, prove that it is sound and complete with respect to the concrete semantics, and prove that it guarantees legality and reducibility. To demonstrate the generality of our semantics, we develop Leanette, a reference evaluator written in Lean, and Rosette 4, an optimized evaluator written in Racket. We prove Leanette correct with respect to the semantics, and validate Rosette 4 against Leanette via solver-aided differential testing. To demonstrate the practicality of our approach, we port 16 published verification and synthesis tools from Rosette 3 to Rosette 4. Rosette 3 is an existing reusable evaluator that implements the classic merging semantics, adopted from bounded model checking. Rosette 4 replaces the semantic core of Rosette 3 but keeps its optimized symbolic factory. Our results show that Rosette 4 matches the performance of Rosette 3 across a wide range of benchmarks, while providing a cleaner interface that simplifies the implementation of client tools.
Sorawee Porncharoenwase, Luke Nelson, Xi Wang 0005, Emina Torlak
Proc. ACM Program. Lang.3
2020 Synthesizing JIT Compilers for In-Kernel DSLs
abstract
Modern operating systems allow user-space applications to submit code for kernel execution through the use of in-kernel domain specific languages (DSLs). Applications use these DSLs to customize system policies and add new functionality. For performance, the kernel executes them via just-in-time (JIT) compilation. The correctness of these JITs is crucial for the security of the kernel: bugs in in-kernel JITs have led to numerous critical issues and patches. This paper presents JitSynth , the first tool for synthesizing verified JITs for in-kernel DSLs. JitSynth takes as input interpreters for the source DSL and the target instruction set architecture. Given these interpreters, and a mapping from source to target states, JitSynth synthesizes a verified JIT compiler from the source to the target. Our key idea is to formulate this synthesis problem as one of synthesizing a per-instruction compiler for abstract register machines . Our core technical contribution is a new compiler metasketch that enables JitSynth to efficiently explore the resulting synthesis search space. To evaluate JitSynth , we use it to synthesize a JIT from eBPF to RISC-V and compare to a recently developed Linux JIT. The synthesized JIT avoids all known bugs in the Linux JIT, with an average slowdown of \(1.82\times \) in the performance of the generated code. We also use JitSynth to synthesize JITs for two additional source-target pairs. The results show that JitSynth offers a promising new way to develop verified JITs for in-kernel DSLs.
Jacob Van Geffen, Luke Nelson, Isil Dillig, Xi Wang 0005, Emina Torlak
CAV (2)4
2020 Automated Verification of Customizable Middlebox Properties with Gravel
Kaiyuan Zhang 0001, Danyang Zhuo, Aditya Akella, Arvind Krishnamurthy, Xi Wang 0005
NSDI5
2020 Specification and verification in the field: Applying formal methods to BPF just-in-time compilers in the Linux kernel
Luke Nelson, Jacob Van Geffen, Emina Torlak, Xi Wang 0005
OSDI4
2019 Scaling symbolic evaluation for automated verification of systems code with Serval
abstract
This paper presents Serval, a framework for developing automated verifiers for systems software. Serval provides an extensible infrastructure for creating verifiers by lifting interpreters under symbolic evaluation, and a systematic approach to identifying and repairing verification performance bottlenecks using symbolic profiling and optimizations.
Luke Nelson, James Bornholt, Ronghui Gu, Andrew Baumann, Emina Torlak, Xi Wang 0005
SOSP6
2018 MultiNyx: a multi-level abstraction framework for systematic analysis of hypervisors
abstract
MultiNyx is a new framework designed to systematically analyze modern virtual machine monitors (VMMs), which rely on complex processor extensions to enhance their efficiency. To achieve better scalability, MultiNyx introduces selective, multi-level symbolic execution: it analyzes most instructions at a high semantic level, and leverages an executable specification (e.g., the Bochs CPU emulator) to analyze complex instructions at a low semantic level. MultiNyx seamlessly transitions between these different semantic levels of analysis by converting their state.
Pedro Fonseca 0001, Xi Wang 0005, Arvind Krishnamurthy
EuroSys2
2018 Nickel: A Framework for Design and Verification of Information Flow Control Systems
Helgi Sigurbjarnarson, Luke Nelson, Bruno Castro-Karney, James Bornholt, Emina Torlak, Xi Wang 0005
OSDI6
2017 An Empirical Study on the Correctness of Formally Verified Distributed Systems
abstract
Recent advances in formal verification techniques enabled the implementation of distributed systems with machine-checked proofs. While results are encouraging, the importance of distributed systems warrants a large scale evaluation of the results and verification practices.
Pedro Fonseca 0001, Kaiyuan Zhang 0001, Xi Wang 0005, Arvind Krishnamurthy
EuroSys3
2017 Customizing Progressive JPEG for Efficient Image Storage
Eddie Q. Yan, Kaiyuan Zhang 0001, Xi Wang 0005, Karin Strauss, Luis Ceze
HotStorage3
2017 Hyperkernel: Push-Button Verification of an OS Kernel
abstract
This paper describes an approach to designing, implementing, and formally verifying the functional correctness of an OS kernel, named Hyperkernel, with a high degree of proof automation and low proof burden. We base the design of Hyperkernel's interface on xv6, a Unix-like teaching operating system. Hyperkernel introduces three key ideas to achieve proof automation: it finitizes the kernel interface to avoid unbounded loops or recursion; it separates kernel and user address spaces to simplify reasoning about virtual memory; and it performs verification at the LLVM intermediate representation level to avoid modeling complicated C semantics.
Luke Nelson, Helgi Sigurbjarnarson, Kaiyuan Zhang 0001, Dylan Johnson, James Bornholt, Emina Torlak, Xi Wang 0005
SOSP7
2016 Specifying and Checking File System Crash-Consistency Models
abstract
Applications depend on persistent storage to recover state after system crashes. But the POSIX file system interfaces do not define the possible outcomes of a crash. As a result, it is difficult for application writers to correctly understand the ordering of and dependencies between file system operations, which can lead to corrupt application state and, in the worst case, catastrophic data loss. This paper presents crash-consistency models, analogous to memory consistency models, which describe the behavior of a file system across crashes. Crash-consistency models include both litmus tests, which demonstrate allowed and forbidden behaviors, and axiomatic and operational specifications. We present a formal framework for developing crash-consistency models, and a toolkit, called Ferrite, for validating those models against real file system implementations. We develop a crash-consistency model for ext4, and use Ferrite to demonstrate unintuitive crash behaviors of the ext4 implementation. To demonstrate the utility of crash-consistency models to application writers, we use our models to prototype proof-of-concept verification and synthesis tools, as well as new library interfaces for crash-safe applications.
James Bornholt, Antoine Kaufmann, Jialin Li 0001, Arvind Krishnamurthy, Emina Torlak, Xi Wang 0005
ASPLOS6
2016 Investigating Safety of a Radiotherapy Machine Using System Models with Pluggable Checkers
Stuart Pernsteiner, Calvin Loncaric, Emina Torlak, Zachary Tatlock, Xi Wang 0005, Michael D. Ernst, Jonathan Jacky
CAV (2)5
2016 Push-Button Verification of File Systems via Crash Refinement
Helgi Sigurbjarnarson, James Bornholt, Emina Torlak, Xi Wang 0005
OSDI4
2015 Verdi: a framework for implementing and formally verifying distributed systems
abstract
Distributed systems are difficult to implement correctly because they must handle both concurrency and failures: machines may crash at arbitrary points and networks may reorder, drop, or duplicate packets. Further, their behavior is often too complex to permit exhaustive testing. Bugs in these systems have led to the loss of critical data and unacceptable service outages. We present Verdi, a framework for implementing and formally verifying distributed systems in Coq. Verdi formalizes various network semantics with different faults, and the developer chooses the most appropriate fault model when verifying their implementation. Furthermore, Verdi eases the verification burden by enabling the developer to first verify their system under an idealized fault model, then transfer the resulting correctness guarantees to a more realistic fault model without any additional proof burden. To demonstrate Verdi's utility, we present the first mechanically checked proof of linearizability of the Raft state machine replication algorithm, as well as verified implementations of a primary-backup replication system and a key-value store. These verified systems provide similar performance to unverified equivalents.
James R. Wilcox, Doug Woos, Pavel Panchekha, Zachary Tatlock, Xi Wang 0005, Michael D. Ernst, Thomas E. Anderson
PLDI5
2015 A Differential Approach to Undefined Behavior Detection
abstract
This article studies undefined behavior arising in systems programming languages such as C/C++. Undefined behavior bugs lead to unpredictable and subtle systems behavior, and their effects can be further amplified by compiler optimizations. Undefined behavior bugs are present in many systems, including the Linux kernel and the Postgres database. The consequences range from incorrect functionality to missing security checks. This article proposes a formal and practical approach that finds undefined behavior bugs by finding “unstable code” in terms of optimizations that leverage undefined behavior. Using this approach, we introduce a new static checker called S tack that precisely identifies undefined behavior bugs. Applying S tack to widely used systems has uncovered 161 new bugs that have been confirmed and fixed by developers.
Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek, Armando Solar-Lezama
ACM Trans. Comput. Syst.1
2014 Cybertron: pushing the limit on I/O reduction in data-parallel programs
abstract
I/O reduction has been a major focus in optimizing data-parallel programs for big-data processing. While the current state-of-the-art techniques use static program analysis to reduce I/O, Cybertron proposes a new direction that incorporates runtime mechanisms to push the limit further on I/O reduction. In particular, Cybertron tracks how data is used in the computation accurately at runtime to filter unused data at finer granularity dynamically, beyond what current static-analysis based mechanisms are capable of, and to facilitate a new mechanism called constraint based encoding for more efficient encoding. Cybertron has been implemented and applied to production data-parallel programs; our extensive evaluations on real programs and real data have shown its effectiveness on I/O reduction over the existing mechanisms at reasonable CPU cost, and its improvement on end-to-end performance in various network environments.
Tian Xiao, Hucheng Zhou, Xu Zhao 0004, Chencheng Ye 0001, Xi Wang 0005, Wei Lin 0016, Lidong Zhou
OOPSLA7
2014 Identifying Information Disclosure in Web Applications with Retroactive Auditing
Haogang Chen 0001, Taesoo Kim, Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek
OSDI3
2014 Jitk: A Trustworthy In-Kernel Interpreter Infrastructure
Xi Wang 0005, David Lazar, Nickolai Zeldovich, Adam Chlipala, Zachary Tatlock
OSDI1
2013 Towards optimization-safe systems: analyzing the impact of undefined behavior
abstract
This paper studies an emerging class of software bugs called optimization-unstable code: code that is unexpectedly discarded by compiler optimizations due to undefined behavior in the program. Unstable code is present in many systems, including the Linux kernel and the Postgres database. The consequences of unstable code range from incorrect functionality to missing security checks.
Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek, Armando Solar-Lezama
SOSP1
2012 Improving Integer Security for Systems with KINT
Xi Wang 0005, Haogang Chen 0001, Nickolai Zeldovich, M. Frans Kaashoek
OSDI1
2011 Software fault isolation with API integrity and multi-principal modules
abstract
The security of many applications relies on the kernel being secure, but history suggests that kernel vulnerabilities are routinely discovered and exploited. In particular, exploitable vulnerabilities in kernel modules are common. This paper proposes LXFI, a system which isolates kernel modules from the core kernel so that vulnerabilities in kernel modules cannot lead to a privilege escalation attack. To safely give kernel modules access to complex kernel APIs, LXFI introduces the notion of API integrity, which captures the set of contracts assumed by an interface. To partition the privileges within a shared module, LXFI introduces module principals. Programmers specify principals and API integrity rules through capabilities and annotations. Using a compiler plugin, LXFI instruments the generated code to grant, check, and transfer capabilities between modules, according to the programmer's annotations. An evaluation with Linux shows that the annotations required on kernel functions to support a new module are moderate, and that LXFI is able to prevent three known privilege-escalation vulnerabilities. Stress tests of a network driver module also show that isolating this module using LXFI does not hurt TCP throughput but reduces UDP throughput by 35%, and increases CPU utilization by 2.2-3.7x.
Yandong Mao, Haogang Chen 0001, Dong Zhou 0006, Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek
SOSP4
2010 Intrusion Recovery Using Selective Re-execution
Taesoo Kim, Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek
OSDI2
2010 Language-based replay via data flow cut
abstract
A replay tool aiming to reproduce a program's execution interposes itself at an appropriate replay interface between the program and the environment. During recording, it logs all non-deterministic side effects passing through the interface from the environment and feeds them back during replay. The replay interface is critical for correctness and recording overhead of replay tools.
Ming Wu 0007, Fan Long, Xi Wang 0005, Zhilei Xu, Haoxiang Lin, Xuezheng Liu, Huayang Guo, Lidong Zhou, Zheng Zhang 0001
SIGSOFT FSE3
2009 Api hyperlinking via structural overlap
abstract
This paper presents a tool Altair that automatically generates API function cross-references, which emphasizes reliable structural measures and does not depend on specific client code. Altair ranks related API functions for a given query according to pair-wise overlap, i.e., how they share state, and clusters tightly related ones into meaningful modules.
Fan Long, Xi Wang 0005, Yang Cai 0001
ESEC/SIGSOFT FSE2
2009 Improving application security with data flow assertions
abstract
Resin is a new language runtime that helps prevent security vulnerabilities, by allowing programmers to specify application-level data flow assertions. Resin provides policy objects, which programmers use to specify assertion code and metadata; data tracking, which allows programmers to associate assertions with application data, and to keep track of assertions as the data flow through the application; and filter objects, which programmers use to define data flow boundaries at which assertions are checked. Resin's runtime checks data flow assertions by propagating policy objects along with data, as that data moves through the application, and then invoking filter objects when data crosses a data flow boundary, such as when writing data to the network or a file.
Alexander Yip, Xi Wang 0005, Nickolai Zeldovich, M. Frans Kaashoek
SOSP2
2008 Hang analysis: fighting responsiveness bugs
abstract
Soft hang is an action that was expected to respond instantly but instead drives an application into a coma. While the application usually responds eventually, users cannot issue other requests while waiting. Such hang problems are widespread in productivity tools such as desktop applications; similar issues arise in server programs as well. Hang problems arise because the software contains blocking or time-consuming operations in graphical user interface (GUI) and other time-critical call paths that should not.
Xi Wang 0005, Xuezheng Liu, Zhilei Xu, Haoxiang Lin, Xiaoge Wang, Zheng Zhang 0001
EuroSys1
2008 D3S: Debugging Deployed Distributed Systems
Xuezheng Liu, Xi Wang 0005, Feibo Chen, Xiaochen Lian, Ming Wu 0007, M. Frans Kaashoek, Zheng Zhang 0001
NSDI3
2008 R2: An Application-Level Kernel for Record and Replay
Xi Wang 0005, Xuezheng Liu, Zhilei Xu, Ming Wu 0007, M. Frans Kaashoek, Zheng Zhang 0001
OSDI2
2008 Conditional correlation analysis for safe region-based memory management
abstract
Region-based memory management is a popular scheme in systems software for better organization and performance. In the scheme, a developer constructs a hierarchy of regions of different lifetimes and allocates objects in regions. When the developer deletes a region, the runtime will recursively delete all its subregions and simultaneously reclaim objects in the regions. The developer must construct a consistent placement of objects in regions; otherwise, if a region that contains pointers to other regions is not always deleted before pointees, an inconsistency will surface and cause dangling pointers, which may lead to either crashes or leaks.
Xi Wang 0005, Zhilei Xu, Xuezheng Liu, Xiaoge Wang, Zheng Zhang 0001
PLDI1