Automatically detecting and fixing concurrency bugs in go software systems
- 17 April 2021
- conference paper
- conference paper
- Published by Association for Computing Machinery (ACM)
Abstract
Go is a statically typed programming language designed for efficient and reliable concurrent programming. For this purpose, Go provides lightweight goroutines and recommends passing messages using channels as a less error-prone means of thread communication. Go has become increasingly popular in recent years and has been adopted to build many important infrastructure software systems. However, a recent empirical study shows that concurrency bugs, especially those due to misuse of channels, exist widely in Go. These bugs severely hurt the reliability of Go concurrent systems. To fight Go concurrency bugs caused by misuse of channels, this paper proposes a static concurrency bug detection system, GCatch, and an automated concurrency bug fixing system, GFix. After disentangling an input Go program, GCatch models the complex channel operations in Go using a novel constraint system and applies a constraint solver to identify blocking bugs. GFix automatically patches blocking bugs detected by GCatch using Go’s channel-related language features. We apply GCatch and GFix to 21 popular Go applications, including Docker, Kubernetes, and gRPC. In total, GCatch finds 149 previously unknown blocking bugs due to misuse of channels and GFix successfully fixes 124 of them. We have reported all detected bugs and generated patches to developers. So far, developers have fixed 125 blocking misuse-of-channel bugs based on our reporting. Among them, 87 bugs are fixed by applying GFix’s patches directly.Keywords
Funding Information
- National Science Foundation (CNS-1955965)
This publication has 53 references indexed in Scilit:
- ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugsPublished by Association for Computing Machinery (ACM) ,2015
- Stateless model checking concurrent programs with maximal causality reductionPublished by Association for Computing Machinery (ACM) ,2015
- A large scale study of programming languages and code quality in githubPublished by Association for Computing Machinery (ACM) ,2014
- Understanding and detecting real-world performance bugsPublished by Association for Computing Machinery (ACM) ,2012
- Data races vs. data race bugsPublished by Association for Computing Machinery (ACM) ,2012
- A Sound Reduction of Persistent-Sets for Deadlock Detection in MPI ApplicationsLecture Notes in Computer Science, 2012
- Persuasive prediction of concurrency access anomaliesPublished by Association for Computing Machinery (ACM) ,2011
- Trace-Based Symbolic Analysis for Atomicity ViolationsLecture Notes in Computer Science, 2010
- Z3: An Efficient SMT SolverLecture Notes in Computer Science, 2008
- RaceTrackPublished by Association for Computing Machinery (ACM) ,2005