SlideShare a Scribd company logo
Institute for System Programming of the Russian Academy of Sciences
Predicate Abstraction Based
Configurable Method for Data Race
Detection in Linux Kernel
Pavel Andrianov, Vadim Mutilin,
Alexey Khoroshilov
2
int global;
Race Condition
Thread 1
{
...
global = 1;
...
}
Thread 2
{
...
global = 2;
...
}
A situation, in which
simultaneous accesses
to the same memory
location take place from
several threads, one of
the accesses is write
3
Real Data Race
drivers/net/wireless/marvell/libertas/libertas.ko
disconnect:
…
kfree_skb(priv->currenttxskb);
priv->currenttxskb = NULL;
priv->tx_pending_len = 0;
...
transmit:
spin_lock(&priv->driver_lock, flags)
if (priv->currenttxskb == NULL)
return;
…
priv->currenttxskb->protocol =
eth_type_trans(priv->currenttxskb,
priv->dev);
netif_rx(priv->currenttxskb);
…
spin_unlock(&priv->driver_lock,
flags)
4
Commit
5
Motivation
●
Concurrency bugs make up 20% of all
across the file systems (A Study of Linux
File System Evolution, FAST'13)
●
Data race conditions make up 17% of all
errors in the Linux kernel (Analysis of
typical faults in Linux operating system
drivers, Proceedings ISP RAN)
6
Other Tools
Fast and imprecise Precise, but slow
Example: RELAY Example: Threader
Difficult to adjust a tool to a particular task
Adjustable analysis?
7
Lockset Algorithm
Potential data race is a situation, when
accesses to the same shared data occur
with disjoint sets of locks from two parallel
threads, one access is write.
8
Potential Race Condition
…
*a = 1;
...
…
mutex_lock();
*a = 1;
mutex_unlock();
...
●
A disjoint set of synchronization primitives
●
The same shared data
●
Accesses from different threads, which can be
executed simultaneously
●
Real (reachable) paths
9
Lightweight core algorithm
Method overview
A set of warnings
Lockset
algorithm
Shared
analysis
Heavyweight extensions
CEGAR
Thread
analysis
Precise warnings Imprecise warnings
10
Counter Example Guided Abstraction
Refinement
Error? Safe
Counterexample
Feasible?
Abstraction Refinement
Unsafe
No
Yes
YesNo
Solver
Analysis
Interpolation
11
Reachability analysis
based on predicate abstraction
{},[]
{},[]
{lock}, []
{}, []
{lock},[]
{}, []
{}, []
{}, []
{lock}, []
{lock}, []
{lock}, []
{}, []
{}, []
{}, []
int global;
int func(int var) {
if (var) {
lock();
}
global++;
if (var) {
unlock();
}
}
{}, []
12
Reachability analysis
based on predicate abstraction
{}
{}
{lock}, [var != 0]
{}, [var == 0]
{lock}
{}, [var != 0]
{}, [var == 0]
{}
{lock}, [var != 0]
{lock}, [var != 0]
{lock}, [var != 0]
{}, [var == 0]
{}, [var == 0]
{}, [var != 0]
int global;
int func(int var) {
if (var) {
lock();
}
global++;
if (var) {
unlock();
}
}
13
Two Ways of Refinement
Analysis
Refinement
Analysis
Refinement
14
Example of False Alarm
adm8211_start(dev)
adm8211_init_rings(dev)
request_irq(adm8211_interrupt)
dev->priv->tx_buffers[entry]->skb
adm8211_interrupt(dev)
dev->priv->tx_buffers[entry]->skb
15
Example of False Alarm
adm8211_start(dev)
adm8211_interrupt(dev)request_irq(adm8211_interrupt)
dev->priv->tx_buffers[entry]->skb
dev->priv->tx_buffers[entry]->skb
16
Example of Linux Driver
module_init()
catc_probe()
catc_open()
module_exit()
usb_register_driver()
register_netdev()
catc_close()
catc_disconnect()
unregister_netdev()
usb_deregister()
usb_driver net_device
17
Example of Model
entry_point usb_driver
handlers
usb_register_driver
usb_deregister()
net_device
handlers
register_netdev()
unregister_netdev()
18
Анализ разделяемых данных
struct my_struct {
int *b;
} *А;
int func() {
int *a;
a = malloc();
If
(undef_value) {
A->b = a;
}
*a = 1;
}
Доступ к разделяемым данным – потенциальная
гонка
{}
{a → local}
{a → local}
{a → shared}
{a → shared}
[undef_value !
= 0]
[undef_value
== 0]
19
Анализ примитивов
синхронизации
int global;
int func(int var) {
if (var) {
lock();
}
global++;
if (var) {
unlock();
}
}
{}
{}
{lock}
{} {lock}
{} {lock}
{} {lock}
{lock}
{}
{}
{}
{}
20
Thread Analysis
int global;
Int start() {
global = 0;
pthread_create(&thread, .., worker, ..);
pthread_join(&thread);
result = global;
}
{1.1}
{1.1}
{1.1, 2.1}{1.1}
{1.1, 2.1}{1.1, 2.0}
{1.1, 2.1}{1.1}
{1.1}
int worker() {
global++;
}
21
Method Overview
22
Results
Unsafes Unknowns Safes Time, h Memory, Gb
+ Threads,
+ Refinement
5 61 51 3.2 8.1
- Threads,
+ Refinement
6 67 44 4.1 4.0
+ Threads,
- Refinement
27 57 49 2.3 8.2
- Threads,
- Refinement
186 54 43 2.1 3.5
113 modules of OS Linux 4.5-rc1 subsystem drivers/net/wireless/
23
2219 warnings at drivers/
●
2219 warnings = 270 unsafe drivers
●
55% - imprecision of environment model
●
10% - simple memory model
●
10% - operations with lists
●
10% - other inaccuracies in our analysis
●
15% - true races
●
290 true warnings = 32 bugs
24
Conclusion
●
Flexible adjustment of the balance
between resources and accuracy
●
Applicable to industry projects
●
Real race conditions are found
25
Thank you!
Questions?

More Related Content

PDF
TMPA-2017: The Quest for Average Response Time
PDF
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
PDF
Java, Up to Date Sources
PPTX
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
PDF
Антон Бикинеев, Writing good std::future< C++ >
PPT
Евгений Крутько, Многопоточные вычисления, современный подход.
PDF
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
PDF
Bartosz Milewski, “Re-discovering Monads in C++”
TMPA-2017: The Quest for Average Response Time
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
Java, Up to Date Sources
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Антон Бикинеев, Writing good std::future< C++ >
Евгений Крутько, Многопоточные вычисления, современный подход.
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
Bartosz Milewski, “Re-discovering Monads in C++”

What's hot (20)

PPTX
Pro typescript.ch03.Object Orientation in TypeScript
PDF
Welcome to Modern C++
PDF
The mighty js_function
PPTX
How to add an optimization for C# to RyuJIT
PDF
Qt Rest Server
PDF
OpenFOAM Programming Tips
PDF
Rainer Grimm, “Functional Programming in C++11”
PDF
Spatial Interpolation Schemes in OpenFOAM
PDF
Joel Falcou, Boost.SIMD
PDF
[FT-11][suhorng] “Poor Man's” Undergraduate Compilers
PDF
Limited Gradient Schemes in OpenFOAM
ODP
Bluespec @waseda
PPT
为什么 rust-lang 吸引我?
PDF
Коварный code type ITGM #9
PPTX
Modeling FSMs
PDF
Антон Нонко, Классические строки в C++
PDF
第二回CTF勉強会資料
PDF
[ROOTCON13] Pilot Study on Semi-Automated Patch Diffing by Applying Machine-L...
PDF
CFD for Rotating Machinery using OpenFOAM
PDF
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Pro typescript.ch03.Object Orientation in TypeScript
Welcome to Modern C++
The mighty js_function
How to add an optimization for C# to RyuJIT
Qt Rest Server
OpenFOAM Programming Tips
Rainer Grimm, “Functional Programming in C++11”
Spatial Interpolation Schemes in OpenFOAM
Joel Falcou, Boost.SIMD
[FT-11][suhorng] “Poor Man's” Undergraduate Compilers
Limited Gradient Schemes in OpenFOAM
Bluespec @waseda
为什么 rust-lang 吸引我?
Коварный code type ITGM #9
Modeling FSMs
Антон Нонко, Классические строки в C++
第二回CTF勉強会資料
[ROOTCON13] Pilot Study on Semi-Automated Patch Diffing by Applying Machine-L...
CFD for Rotating Machinery using OpenFOAM
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Ad

Viewers also liked (20)

PDF
TMPA-2017: A Survey of High-Performance Computing for Software Verification
PDF
TMPA-2017: Regression Testing with Semiautomatic Test Selection for Auditing ...
PDF
TMPA-2017: Dl-Check: Dynamic Potential Deadlock Detection Tool for Java Programs
PDF
TMPA-2017: Stemming Architectural Decay in Software Systems
PDF
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
PDF
TMPA-2017: Functional Parser of Markdown Language Based on Monad Combining an...
PDF
TMPA-2017: Layered Layouts for Software Systems Visualization
PDF
TMPA-2017: Extended Context-Free Grammars Parsing with Generalized LL
PDF
TMPA-2017: Evolutionary Algorithms in Test Generation for digital systems
PDF
TMPA-2017: Conference Opening
PDF
TMPA-2017: Using Functional Directives to Analyze Code Complexity and Communi...
PDF
TMPA-2017: Technology and Tools for Developing Industrial Software Test Suite...
PDF
TMPA-2017: Static Checking of Array Objects in JavaScript
PDF
TMPA-2017: 5W+1H Static Analysis Report Quality Measure
PDF
TMPA-2017: Vellvm - Verifying the LLVM
PDF
TMPA-2017: Defect Report Classification in Accordance with Areas of Testing
PDF
TMPA-2017: Compositional Process Model Synthesis based on Interface Patterns
PDF
TMPA-2017: Generating Cost Aware Covering Arrays For Free
PDF
TMPA-2017: Live testing distributed system fault tolerance with fault injecti...
PDF
TMPA-2017: Distributed Analysis of the BMC Kind: Making It Fit the Tornado Su...
TMPA-2017: A Survey of High-Performance Computing for Software Verification
TMPA-2017: Regression Testing with Semiautomatic Test Selection for Auditing ...
TMPA-2017: Dl-Check: Dynamic Potential Deadlock Detection Tool for Java Programs
TMPA-2017: Stemming Architectural Decay in Software Systems
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: Functional Parser of Markdown Language Based on Monad Combining an...
TMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Extended Context-Free Grammars Parsing with Generalized LL
TMPA-2017: Evolutionary Algorithms in Test Generation for digital systems
TMPA-2017: Conference Opening
TMPA-2017: Using Functional Directives to Analyze Code Complexity and Communi...
TMPA-2017: Technology and Tools for Developing Industrial Software Test Suite...
TMPA-2017: Static Checking of Array Objects in JavaScript
TMPA-2017: 5W+1H Static Analysis Report Quality Measure
TMPA-2017: Vellvm - Verifying the LLVM
TMPA-2017: Defect Report Classification in Accordance with Areas of Testing
TMPA-2017: Compositional Process Model Synthesis based on Interface Patterns
TMPA-2017: Generating Cost Aware Covering Arrays For Free
TMPA-2017: Live testing distributed system fault tolerance with fault injecti...
TMPA-2017: Distributed Analysis of the BMC Kind: Making It Fit the Tornado Su...
Ad

Similar to TMPA-2017: Predicate Abstraction Based Configurable Method for Data Race Detection in Linux Kernel (20)

PDF
Fast and Precise Symbolic Analysis of Concurrency Bugs in Device Drivers
PPT
Detecting and Preventing Memory Attacks#
PDF
Describe synchronization techniques used by programmers who develop .pdf
PPT
Earhart
PPT
the windows opereting system
PDF
Faults inside System Software
PDF
Linux Kernel Security Overview - KCA 2009
PPTX
Ice Age melting down: Intel features considered usefull!
PDF
[USENIX-WOOT] Introduction to Procedural Debugging through Binary Libification
PDF
Análise de malware com suporte de hardware
PDF
Memory Barriers in the Linux Kernel
PDF
Resilient IoT Security: The end of flat security models
PDF
AOS Lab 4: If you liked it, then you should have put a “lock” on it
PDF
PPSX
linux kernel overview 2013
PPT
Synchronization linux
PDF
Implementing a Security strategy in IoT, Practical example Automotive Grade L...
PDF
Linux Device Driver parallelism using SMP and Kernel Pre-emption
PDF
Never Trust Your Inputs
PDF
[Ruxcon 2011] Post Memory Corruption Memory Analysis
Fast and Precise Symbolic Analysis of Concurrency Bugs in Device Drivers
Detecting and Preventing Memory Attacks#
Describe synchronization techniques used by programmers who develop .pdf
Earhart
the windows opereting system
Faults inside System Software
Linux Kernel Security Overview - KCA 2009
Ice Age melting down: Intel features considered usefull!
[USENIX-WOOT] Introduction to Procedural Debugging through Binary Libification
Análise de malware com suporte de hardware
Memory Barriers in the Linux Kernel
Resilient IoT Security: The end of flat security models
AOS Lab 4: If you liked it, then you should have put a “lock” on it
linux kernel overview 2013
Synchronization linux
Implementing a Security strategy in IoT, Practical example Automotive Grade L...
Linux Device Driver parallelism using SMP and Kernel Pre-emption
Never Trust Your Inputs
[Ruxcon 2011] Post Memory Corruption Memory Analysis

More from Iosif Itkin (20)

PDF
Foundations of Software Testing Lecture 4
PPTX
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
PDF
Exactpro FinTech Webinar - Global Exchanges Test Oracles
PDF
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
PDF
Operational Resilience in Financial Market Infrastructures
PDF
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
PDF
Testing the Intelligence of your AI
PDF
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
PDF
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
PPTX
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
PDF
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
PDF
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
PPTX
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
PDF
QA Community Saratov: Past, Present, Future (2019-02-08)
PDF
Machine Learning and RoboCop Testing
PDF
Behaviour Driven Development: Oltre i limiti del possibile
PDF
2018 - Exactpro Year in Review
PPTX
Exactpro Discussion about Joy and Strategy
PPTX
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
PDF
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Foundations of Software Testing Lecture 4
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Operational Resilience in Financial Market Infrastructures
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Testing the Intelligence of your AI
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QA Community Saratov: Past, Present, Future (2019-02-08)
Machine Learning and RoboCop Testing
Behaviour Driven Development: Oltre i limiti del possibile
2018 - Exactpro Year in Review
Exactpro Discussion about Joy and Strategy
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)

Recently uploaded (20)

PPT
Teaching material agriculture food technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Machine learning based COVID-19 study performance prediction
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Approach and Philosophy of On baking technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Cloud computing and distributed systems.
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
KodekX | Application Modernization Development
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
Teaching material agriculture food technology
Encapsulation_ Review paper, used for researhc scholars
sap open course for s4hana steps from ECC to s4
Diabetes mellitus diagnosis method based random forest with bat algorithm
Building Integrated photovoltaic BIPV_UPV.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Programs and apps: productivity, graphics, security and other tools
Machine learning based COVID-19 study performance prediction
NewMind AI Weekly Chronicles - August'25 Week I
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Approach and Philosophy of On baking technology
MIND Revenue Release Quarter 2 2025 Press Release
Cloud computing and distributed systems.
Reach Out and Touch Someone: Haptics and Empathic Computing
KodekX | Application Modernization Development
Mobile App Security Testing_ A Comprehensive Guide.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Dropbox Q2 2025 Financial Results & Investor Presentation

TMPA-2017: Predicate Abstraction Based Configurable Method for Data Race Detection in Linux Kernel

  • 1. Institute for System Programming of the Russian Academy of Sciences Predicate Abstraction Based Configurable Method for Data Race Detection in Linux Kernel Pavel Andrianov, Vadim Mutilin, Alexey Khoroshilov
  • 2. 2 int global; Race Condition Thread 1 { ... global = 1; ... } Thread 2 { ... global = 2; ... } A situation, in which simultaneous accesses to the same memory location take place from several threads, one of the accesses is write
  • 3. 3 Real Data Race drivers/net/wireless/marvell/libertas/libertas.ko disconnect: … kfree_skb(priv->currenttxskb); priv->currenttxskb = NULL; priv->tx_pending_len = 0; ... transmit: spin_lock(&priv->driver_lock, flags) if (priv->currenttxskb == NULL) return; … priv->currenttxskb->protocol = eth_type_trans(priv->currenttxskb, priv->dev); netif_rx(priv->currenttxskb); … spin_unlock(&priv->driver_lock, flags)
  • 5. 5 Motivation ● Concurrency bugs make up 20% of all across the file systems (A Study of Linux File System Evolution, FAST'13) ● Data race conditions make up 17% of all errors in the Linux kernel (Analysis of typical faults in Linux operating system drivers, Proceedings ISP RAN)
  • 6. 6 Other Tools Fast and imprecise Precise, but slow Example: RELAY Example: Threader Difficult to adjust a tool to a particular task Adjustable analysis?
  • 7. 7 Lockset Algorithm Potential data race is a situation, when accesses to the same shared data occur with disjoint sets of locks from two parallel threads, one access is write.
  • 8. 8 Potential Race Condition … *a = 1; ... … mutex_lock(); *a = 1; mutex_unlock(); ... ● A disjoint set of synchronization primitives ● The same shared data ● Accesses from different threads, which can be executed simultaneously ● Real (reachable) paths
  • 9. 9 Lightweight core algorithm Method overview A set of warnings Lockset algorithm Shared analysis Heavyweight extensions CEGAR Thread analysis Precise warnings Imprecise warnings
  • 10. 10 Counter Example Guided Abstraction Refinement Error? Safe Counterexample Feasible? Abstraction Refinement Unsafe No Yes YesNo Solver Analysis Interpolation
  • 11. 11 Reachability analysis based on predicate abstraction {},[] {},[] {lock}, [] {}, [] {lock},[] {}, [] {}, [] {}, [] {lock}, [] {lock}, [] {lock}, [] {}, [] {}, [] {}, [] int global; int func(int var) { if (var) { lock(); } global++; if (var) { unlock(); } } {}, []
  • 12. 12 Reachability analysis based on predicate abstraction {} {} {lock}, [var != 0] {}, [var == 0] {lock} {}, [var != 0] {}, [var == 0] {} {lock}, [var != 0] {lock}, [var != 0] {lock}, [var != 0] {}, [var == 0] {}, [var == 0] {}, [var != 0] int global; int func(int var) { if (var) { lock(); } global++; if (var) { unlock(); } }
  • 13. 13 Two Ways of Refinement Analysis Refinement Analysis Refinement
  • 14. 14 Example of False Alarm adm8211_start(dev) adm8211_init_rings(dev) request_irq(adm8211_interrupt) dev->priv->tx_buffers[entry]->skb adm8211_interrupt(dev) dev->priv->tx_buffers[entry]->skb
  • 15. 15 Example of False Alarm adm8211_start(dev) adm8211_interrupt(dev)request_irq(adm8211_interrupt) dev->priv->tx_buffers[entry]->skb dev->priv->tx_buffers[entry]->skb
  • 16. 16 Example of Linux Driver module_init() catc_probe() catc_open() module_exit() usb_register_driver() register_netdev() catc_close() catc_disconnect() unregister_netdev() usb_deregister() usb_driver net_device
  • 17. 17 Example of Model entry_point usb_driver handlers usb_register_driver usb_deregister() net_device handlers register_netdev() unregister_netdev()
  • 18. 18 Анализ разделяемых данных struct my_struct { int *b; } *А; int func() { int *a; a = malloc(); If (undef_value) { A->b = a; } *a = 1; } Доступ к разделяемым данным – потенциальная гонка {} {a → local} {a → local} {a → shared} {a → shared} [undef_value ! = 0] [undef_value == 0]
  • 19. 19 Анализ примитивов синхронизации int global; int func(int var) { if (var) { lock(); } global++; if (var) { unlock(); } } {} {} {lock} {} {lock} {} {lock} {} {lock} {lock} {} {} {} {}
  • 20. 20 Thread Analysis int global; Int start() { global = 0; pthread_create(&thread, .., worker, ..); pthread_join(&thread); result = global; } {1.1} {1.1} {1.1, 2.1}{1.1} {1.1, 2.1}{1.1, 2.0} {1.1, 2.1}{1.1} {1.1} int worker() { global++; }
  • 22. 22 Results Unsafes Unknowns Safes Time, h Memory, Gb + Threads, + Refinement 5 61 51 3.2 8.1 - Threads, + Refinement 6 67 44 4.1 4.0 + Threads, - Refinement 27 57 49 2.3 8.2 - Threads, - Refinement 186 54 43 2.1 3.5 113 modules of OS Linux 4.5-rc1 subsystem drivers/net/wireless/
  • 23. 23 2219 warnings at drivers/ ● 2219 warnings = 270 unsafe drivers ● 55% - imprecision of environment model ● 10% - simple memory model ● 10% - operations with lists ● 10% - other inaccuracies in our analysis ● 15% - true races ● 290 true warnings = 32 bugs
  • 24. 24 Conclusion ● Flexible adjustment of the balance between resources and accuracy ● Applicable to industry projects ● Real race conditions are found