Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Jianzhou Zhao is active.

Publication


Featured researches published by Jianzhou Zhao.


programming language design and implementation | 2009

SoftBound: highly compatible and complete spatial memory safety for c

Santosh Nagarakatte; Jianzhou Zhao; Milo M. K. Martin; Steve Zdancewic

The serious bugs and security vulnerabilities facilitated by C/C++s lack of bounds checking are well known, yet C and C++ remain in widespread use. Unfortunately, Cs arbitrary pointer arithmetic, conflation of pointers and arrays, and programmer-visible memory layout make retrofitting C/C++ with spatial safety guarantees extremely challenging. Existing approaches suffer from incompleteness, have high runtime overhead, or require non-trivial changes to the C source code. Thus far, these deficiencies have prevented widespread adoption of such techniques. This paper proposes SoftBound, a compile-time transformation for enforcing spatial safety of C. Inspired by HardBound, a previously proposed hardware-assisted approach, SoftBound similarly records base and bound information for every pointer as disjoint metadata. This decoupling enables SoftBound to provide spatial safety without requiring changes to C source code. Unlike HardBound, SoftBound is a software-only approach and performs metadata manipulation only when loading or storing pointer values. A formal proof shows that this is sufficient to provide spatial safety even in the presence of arbitrary casts. SoftBounds full checking mode provides complete spatial violation detection with 67% runtime overhead on average. To further reduce overheads, SoftBound has a store-only checking mode that successfully detects all the security vulnerabilities in a test suite at the cost of only 22% runtime overhead on average.


international symposium on memory management | 2010

CETS: compiler enforced temporal safety for C

Santosh Nagarakatte; Jianzhou Zhao; Milo M. K. Martin; Steve Zdancewic

Temporal memory safety errors, such as dangling pointer dereferences and double frees, are a prevalent source of software bugs in unmanaged languages such as C. Existing schemes that attempt to retrofit temporal safety for such languages have high runtime overheads and/or are incomplete, thereby limiting their effectiveness as debugging aids. This paper presents CETS, a compile-time transformation for detecting all violations of temporal safety in C programs. Inspired by existing approaches, CETS maintains a unique identifier with each object, associates this metadata with the pointers in a disjoint metadata space to retain memory layout compatibility, and checks that the object is still allocated on pointer dereferences. A formal proof shows that this is sufficient to provide temporal safety even in the presence of arbitrary casts if the program contains no spatial safety violations. Our CETS prototype employs both temporal check removal optimizations and traditional compiler optimizations to achieve a runtime overhead of just 48% on average. When combined with a spatial-checking system, the average overall overhead is 116% for complete memory safety


symposium on principles of programming languages | 2012

Formalizing the LLVM intermediate representation for verified program transformations

Jianzhou Zhao; Santosh Nagarakatte; Milo M. K. Martin; Steve Zdancewic

This paper presents Vellvm (verified LLVM), a framework for reasoning about programs expressed in LLVMs intermediate representation and transformations that operate on it. Vellvm provides a mechanized formal semantics of LLVMs intermediate representation, its type system, and properties of its SSA form. The framework is built using the Coq interactive theorem prover. It includes multiple operational semantics and proves relations among them to facilitate different reasoning styles and proof techniques. To validate Vellvms design, we extract an interpreter from the Coq formal semantics that can execute programs from LLVM test suite and thus be compared against LLVM reference implementations. To demonstrate Vellvms practicality, we formalize and verify a previously proposed transformation that hardens C programs against spatial memory safety violations. Vellvms tools allow us to extract a new, verified implementation of the transformation pass that plugs into the real LLVM infrastructure; its performance is competitive with the non-verified, ad-hoc original.


international conference on functional programming | 2008

AURA: a programming language for authorization and audit

Limin Jia; Jeffrey A Vaughan; Karl Mazurak; Jianzhou Zhao; Luke Zarko; Joseph Schorr; Steve Zdancewic

This paper presents AURA, a programming language for access control that treats ordinary programming constructs (e.g., integers and recursive functions) and authorization logic constructs (e.g., principals and access control policies) in a uniform way. AURA is based on polymorphic DCC and uses dependent types to permit assertions that refer directly to AURA values while keeping computation out of the assertion level to ensure tractability. The main technical results of this paper include fully mechanically verified proofs of the decidability and soundness for AURAs type system, and a prototype typechecker and interpreter.


types in languages design and implementation | 2010

Lightweight linear types in system f

Karl Mazurak; Jianzhou Zhao; Steve Zdancewic

We present System F°, an extension of System F that uses kinds to distinguish between linear and unrestricted types, simplifying the use of linearity for general-purpose programming. We demonstrate through examples how System F° can elegantly express many useful protocols, and we prove that any protocol representable as a DFA can be encoded as an F° type. We supply mechanized proofs of System F°s soundness and parametricity properties, along with a nonstandard operational semantics that formalizes common intuitions about linearity and aids in reasoning about protocols. We compare System F° to other linear systems, noting that the simplicity of our kind-based approach leads to a more explicit account of what linearity is meant to capture, allowing otherwise-conflicting interpretations of linearity (in particular, restrictions on aliasing versus restrictions on resource usage) to coexist peacefully. We also discuss extensions to System F^o aimed at making the core language more practical, including the additive fragment of linear logic, algebraic datatypes, and recursion.


certified programs and proofs | 2012

Mechanized verification of computing dominators for formalizing compilers

Jianzhou Zhao; Steve Zdancewic

One prerequisite to the formal verification of modern compilers is to formalize computing dominators, which enable SSA forms, advanced optimizations, and analysis. This paper provides an abstract specification of dominance analysis that is sufficient for formalizing modern compilers; it describes a certified implementation and instance of the specification that is simple to design and reason about, and also reasonably efficient. The paper also presents applications of dominance analysis: an SSA-form type checker, verifying SSA-based optimizations, and constructing dominator trees. This development is a part of the Vellvm project. All proofs and implementation have been carried out in Coq.


symposium on principles of programming languages | 2010

Dependent types and program equivalence

Limin Jia; Jianzhou Zhao; Vilhelm Sjöberg; Stephanie Weirich

The definition of type equivalence is one of the most important design issues for any typed language. In dependently typed languages, because terms appear in types, this definition must rely on a definition of term equivalence. In that case, decidability of type checking requires decidability for the term equivalence relation. Almost all dependently-typed languages require this relation to be decidable. Some, such as Coq, Epigram or Agda, do so by employing analyses to force all programs to terminate. Conversely, others, such as DML, ATS, Ωmega, or Haskell, allow nonterminating computation, but do not allow those terms to appear in types. Instead, they identify a terminating index language and use singleton types to connect indices to computation. In both cases, decidable type checking comes at a cost, in terms of complexity and expressiveness. Conversely, the benefits to be gained by decidable type checking are modest. Termination analyses allow dependently typed programs to verify total correctness properties. However, decidable type checking is not a prerequisite for type safety. Furthermore, decidability does not imply tractability. A decidable approximation of program equivalence may not be useful in practice. Therefore, we take a different approach: instead of a fixed notion for term equivalence, we parameterize our type system with an abstract relation that is not necessarily decidable. We then design a novel set of typing rules that require only weak properties of this abstract relation in the proof of the preservation and progress lemmas. This design provides flexibility: we compare valid instantiations of term equivalence which range from beta-equivalence, to contextual equivalence, to some exotic equivalences.


asian symposium on programming languages and systems | 2010

Relational parametricity for a polymorphic linear lambda calculus

Jianzhou Zhao; Qi Zhang; Steve Zdancewic

This paper presents a novel syntactic logical relation for a polymorphic linear λ-calculus that treats all types as linear and introduces the constructor ! to account for intuitionistic terms, and System F°--an extension of System F that uses kinds to distinguish linear from intuitionistic types. We define a logical relation for open values under both open linear and intuitionistic contexts, then extend it for open terms with evaluation and open relation substitutions. Relations that instantiate type quantifiers are for open terms and types. We demonstrate the applicability of this logical relation through its soundness with respect to contextual equivalence, along with free theorems for linearity that are difficult to achieve by closed logical relations. When interpreting types on only closed terms, the model defaults to a closed logical relation that is both sound and complete with respect to contextual equivalence and is sufficient to reason about isomorphisms of type encodings. All of our results have been mechanically verified in Coq.


programming language design and implementation | 2013

Formal verification of SSA-based optimizations for LLVM

Jianzhou Zhao; Santosh Nagarakatte; Milo M. K. Martin; Steve Zdancewic


Archive | 2008

AURA: Preliminary Technical Results

Limin Jia; Jeffrey A Vaughan; Karl Mazurak; Jianzhou Zhao; Luke Zarko; Joseph Schorr; Steve Zdancewic

Collaboration


Dive into the Jianzhou Zhao's collaboration.

Top Co-Authors

Avatar

Steve Zdancewic

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Karl Mazurak

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Milo M. K. Martin

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Limin Jia

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Jeffrey A Vaughan

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Joseph Schorr

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Luke Zarko

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Qi Zhang

University of Pennsylvania

View shared research outputs
Top Co-Authors

Avatar

Stephanie Weirich

University of Pennsylvania

View shared research outputs
Researchain Logo
Decentralizing Knowledge