Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Will Dietz

dblp:116/6680 · DBLP profile ↗
← Back
6ranked-venue papers
4as first author
0since 2021 · last 2020
0000-0001-7004-2343ORCID · corroborated

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

Software engineering, systems software and programming languages · 5 · 3 first-authorSystems, architecture and hardware · 2 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Compilers and program optimization · 62% Operating systems · 17% Program analysis · 11%
Network and information security
2 papers
Systems and software security · 100%

Topics — the 16 heaviest of 16, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Compilers and program optimization
code size reduction
0.822020
Guided linking: dynamic linking without the costs · Proc. ACM Program. Lang. 2020
Software multiplexing: share your libraries and statically link them too · Proc. ACM Program. Lang. 2018
Compilers and program optimization › interprocedural optimization
link-time optimization
0.412020
Guided linking: dynamic linking without the costs · Proc. ACM Program. Lang. 2020
Program analysis
dynamic analysis
0.422015
Understanding Integer Overflow in C/C++ · ACM Trans. Softw. Eng. Methodol. 2015
Understanding integer overflow in C/C++ · ICSE 2012
Compilers and program optimization
dead code elimination
0.312018
Software multiplexing: share your libraries and statically link them too · Proc. ACM Program. Lang. 2018
Compilers and program optimization › compiler toolchain
static linking
0.312018
Software multiplexing: share your libraries and statically link them too · Proc. ACM Program. Lang. 2018
Systems and software security
memory protection
0.212015
Nested Kernel: An Operating System Architecture for Intra-Kernel Privilege Separation · ASPLOS 2015
Compilers and program optimization
automatic code optimization
0.212015
Slipstream: Automatic Interprocess Communication Optimization · USENIX ATC 2015
Operating systems
interprocess communication
0.212015
Slipstream: Automatic Interprocess Communication Optimization · USENIX ATC 2015
Operating systems › system security › operating system security
kernel security
0.212015
Nested Kernel: An Operating System Architecture for Intra-Kernel Privilege Separation · ASPLOS 2015
Software testing
software reliability
0.212015
Understanding Integer Overflow in C/C++ · ACM Trans. Softw. Eng. Methodol. 2015
Operating systems
dynamic linking
0.112020
Guided linking: dynamic linking without the costs · Proc. ACM Program. Lang. 2020
Software maintenance and evolution › software configuration management › software release management
software packaging
0.112018
Software multiplexing: share your libraries and statically link them too · Proc. ACM Program. Lang. 2018
Distributed systems
communication optimization
0.112015
Slipstream: Automatic Interprocess Communication Optimization · USENIX ATC 2015
Systems and software security › vulnerability discovery
integer overflow vulnerabilities
0.012012
Understanding integer overflow in C/C++ · ICSE 2012
Systems and software security
vulnerability discovery
0.012012
Understanding integer overflow in C/C++ · ICSE 2012
Empirical software engineering
mining software repositories
0.012012
Understanding integer overflow in C/C++ · ICSE 2012

Methods — techniques the papers use, named apart from their topics

empirical study · 0.5dynamic checking · 0.5capability-based protection · 0.4MMU write-protection · 0.4interprocedural optimization · 0.4inlining · 0.4deduplication · 0.3automatic multicall · 0.3IR-level linking · 0.3
YearPublicationVenuePosition
2020 Guided linking: dynamic linking without the costs
abstract
Dynamic linking is extremely common in modern software systems, thanks to the flexibility and space savings it offers. However, this flexibility comes at a cost: it’s impossible to perform interprocedural optimizations that involve calls to a dynamic library. The basic problem is that the run-time behavior of the dynamic linker can’t be predicted at compile time, so the compiler can make no assumptions about how such calls will behave. This paper introduces guided linking , a technique for optimizing dynamically linked software when some information about the dynamic linker’s behavior is known in advance. The developer provides an arbitrary set of programs, libraries, and plugins to our tool, along with constraints that limit the possible dynamic linking behavior of the software. By taking advantage of the constraints, our tool enables any existing optimization to be applied across dynamic linking boundaries. For example, the NoOverride constraint can be applied to a function when the developer knows it will never be overridden with a different definition at run time; guided linking then enables the function to be inlined into its callers in other libraries. We also introduce a novel code size optimization that deduplicates identical functions even across different parts of the software set. By applying guided linking to the Python interpreter and its dynamically loaded modules, supplying the constraint that no other programs or modules will be used, we increase speed by an average of 9%. By applying guided linking to a dynamically linked distribution of Clang and LLVM, and using the constraint that no other software will use the LLVM libraries, we can increase speed by 5% and reduce file size by 13%. If we relax the constraint to allow other software to use the LLVM libraries, we can still increase speed by 5% and reduce file size by 5%. If we use guided linking to combine 11 different versions of the Boost library, using minimal constraints, we can reduce the total library size by 57%.
Sean Bartell, Will Dietz, Vikram S. Adve
Proc. ACM Program. Lang.2
2018 Software multiplexing: share your libraries and statically link them too
abstract
We describe a compiler strategy we call “ Software Multiplexing ” that achieves many benefits of both statically linked and dynamically linked libraries, and adds some additional advantages. Specifically, it achieves the code size benefits of dynamically linked libraries while eliminating the major disadvantages: unexpected failures due to missing dependences, slow startup times, reduced execution performance due to indirect references to globals, and the potential for security vulnerabilities. We design Software Multiplexing so that it works even in the common case where application build systems support only dynamic and not static linking; we have automatically built thousands of Linux software packages in this way. Software Multiplexing combines two ideas: Automatic Multicall , i.e., where multiple independent programs are automatically merged into a single executable, and Static Linking of Shared Libraries , which works by linking an IR-level version of application code and all its libraries, even if the libraries are normally compiled as shared, before native code generation. The benefits are achieved primarily through deduplication of libraries across the multiplexed programs, while using static linking, and secondly through more effective unused code elimination for statically linked shared libraries. Compared with equivalent dynamically linked programs, allmux-optimized programs start more quickly and even have slightly lower memory usage and total disk size. Compared with equivalent statically linked programs, allmux-optimized programs are much smaller in both aggregate size and memory usage, and have similar startup times and execution performance. We have implemented Software Multiplexing in a tool called allmux, part of the open-source ALLVM project. Example results show that when the LLVM Compiler Infrastructure is optimized using allmux, the resulting binaries and libraries are 18.3% smaller and 30% faster than the default production version. For 74 other packages containing 2–166 programs each, multiplexing each package into one static binary reduces the aggregate package size by 39% (geometric mean) compared with dynamic linking.
Will Dietz, Vikram S. Adve
Proc. ACM Program. Lang.1
2015 Nested Kernel: An Operating System Architecture for Intra-Kernel Privilege Separation
abstract
Monolithic operating system designs undermine the security of computing systems by allowing single exploits anywhere in the kernel to enjoy full supervisor privilege. The nested kernel operating system architecture addresses this problem by "nesting" a small isolated kernel within a traditional monolithic kernel. The "nested kernel" interposes on all updates to virtual memory translations to assert protections on physical memory, thus significantly reducing the trusted computing base for memory access control enforcement. We incorporated the nested kernel architecture into FreeBSD on x86-64 hardware while allowing the entire operating system, including untrusted components, to operate at the highest hardware privilege level by write-protecting MMU translations and de-privileging the untrusted part of the kernel. Our implementation inherently enforces kernel code integrity while still allowing dynamically loaded kernel modules, thus defending against code injection attacks. We also demonstrate that the nested kernel architecture allows kernel developers to isolate memory in ways not possible in monolithic kernels by introducing write-mediation and write-logging services to protect critical system data structures. Performance of the nested kernel prototype shows modest overheads: <1% average for Apache and 2.7% for kernel compile. Overall, our results and experience show that the nested kernel design can be retrofitted to existing monolithic kernels, providing important security benefits.
Nathan Dautenhahn, Theodoros Kasampalis, Will Dietz, John Criswell, Vikram S. Adve
ASPLOS3
2015 Slipstream: Automatic Interprocess Communication Optimization
Will Dietz, Joshua Cranmer, Nathan Dautenhahn, Vikram S. Adve
USENIX ATC1
2015 Understanding Integer Overflow in C/C++
abstract
Integer overflow bugs in C and C++ programs are difficult to track down and may lead to fatal errors or exploitable vulnerabilities. Although a number of tools for finding these bugs exist, the situation is complicated because not all overflows are bugs. Better tools need to be constructed, but a thorough understanding of the issues behind these errors does not yet exist. We developed IOC, a dynamic checking tool for integer overflows, and used it to conduct the first detailed empirical study of the prevalence and patterns of occurrence of integer overflows in C and C++ code. Our results show that intentional uses of wraparound behaviors are more common than is widely believed; for example, there are over 200 distinct locations in the SPEC CINT2000 benchmarks where overflow occurs. Although many overflows are intentional, a large number of accidental overflows also occur. Orthogonal to programmers' intent, overflows are found in both well-defined and undefined flavors. Applications executing undefined operations can be, and have been, broken by improvements in compiler optimizations. Looking beyond SPEC, we found and reported undefined integer overflows in SQLite, PostgreSQL, SafeInt, GNU MPC and GMP, Firefox, LLVM, Python, BIND, and OpenSSL; many of these have since been fixed.
Will Dietz, John Regehr, Vikram S. Adve
ACM Trans. Softw. Eng. Methodol.1
2012 Understanding integer overflow in C/C++
abstract
Integer overflow bugs in C and C++ programs are difficult to track down and may lead to fatal errors or exploitable vulnerabilities. Although a number of tools for finding these bugs exist, the situation is complicated because not all overflows are bugs. Better tools need to be constructed - but a thorough understanding of the issues behind these errors does not yet exist. We developed IOC, a dynamic checking tool for integer overflows, and used it to conduct the first detailed empirical study of the prevalence and patterns of occurrence of integer overflows in C and C++ code. Our results show that intentional uses of wraparound behaviors are more common than is widely believed; for example, there are over 200 distinct locations in the SPEC CINT2000 benchmarks where overflow occurs. Although many overflows are intentional, a large number of accidental overflows also occur. Orthogonal to programmers' intent, overflows are found in both well-defined and undefined flavors. Applications executing undefined operations can be, and have been, broken by improvements in compiler optimizations. Looking beyond SPEC, we found and reported undefined integer overflows in SQLite, PostgreSQL, SafeInt, GNU MPC and GMP, Firefox, GCC, LLVM, Python, BIND, and OpenSSL; many of these have since been fixed. Our results show that integer overflow issues in C and C++ are subtle and complex, that they are common even in mature, widely used programs, and that they are widely misunderstood by developers.
Will Dietz, John Regehr, Vikram S. Adve
ICSE1