Alexander Vaynberg's research while affiliated with Yale University and other places

Publications (4)

Conference Paper
A virtual memory manager (VMM) is a part of an operating system that provides the rest of the kernel with an abstract model of memory. Although small in size, it involves complicated and interdependent invariants that make monolithic verification of the VMM and the kernel running on top of it difficult. In this paper, we make the observation that a...
Article
Full-text available
Though attractive as a model for elastic on-demand service, cloud computing solutions based on existing hypervisors cannot guaran-tee that the provider will service a user's requests correctly, and will not leak sensitive information to unauthorized parties. We in-troduce CertiKOS (Certified Kit Operating System), a hypervi-sor architecture that le...
Conference Paper
Self-modifying code (SMC), in this paper, broadly refers to anyprogram that loads, generates, or mutates code at runtime. It is widely used in many of the world's critical software systems tosupport runtime code generation and optimization, dynamic loading and linking, OS boot loader, just-in-time compilation, binary translation,or dynamic code enc...
Conference Paper
Runtime stacks are critical components of any modern software--they are used to implement powerful control structures such as function call/return, stack cutting and unwinding, coroutines, and thread context switch. Stack operations, however, are very hard to reason about: there are no known formal specifications for certifying C-style setjmp/longj...

Citations

... The overall approach in that body of work is many layers of refinement proofs, using a proliferation of layers with small differences to keep most individual refinements tractable. In keeping with precursor work on the project from the same group [51], the purpose of some layers is to abstract away from virtual memory, so the proof is essentially a simulation proof covering for example a proof that execution with page-in on page faults is a valid refinement of an execution model where no paging occurs. ...
... Klein et al. (2017) gives a more thorough overview of the work in this area. Some major achievements are the comprehensive verification of the seL4 microkernel (Klein et al., 2009), the verification stack of the Verisoft project (Alkassar et al., 2009(Alkassar et al., , 2010, the increase of verification productivity in CertiKOS (Gu et al., 2011(Gu et al., , 2015 and the full end-to-end application verification in Ironclad (Hawblitzel et al., 2014), which builds on a modified verified Verve kernel (Yang & Hawblitzel, 2010) and the aforementioned Dafny language. ...
... This makes it difficult, or in the case of highly optimized code impossible, to adapt logics for high-level languages by mapping binary fragments to high-level statements: the code may be re-ordered by compilation, and one high-level statements may be implemented by multiple overlapping fragments and share fragments with other statements. A number of authors have explored the possibility of regaining Hoare-style reasoning also for the unstructured case [18,55,35,2,21,10,51,53,28,44]. However, we argue that there is still room for progress. ...
... Nonetheless, the lack of run-time information makes the code discovery problem and the code location problem [5] hard to solve. In addition, self-modifying code [11], which modifies its own instructions in run time, makes translating such binary a challenge. Dynamically linked programs or libraries are also difficult to translate using static binary translation. ...