Abstract

The paper takes a look at the problem of deductive verification of Linux kernel code that is concurrent and accesses shared data. The presence of shared data does not allow to apply traditional deductive verification techniques, so we consider how to verify such code using proof of its compliance to a specification of a synchronization discipline. The approach is demonstrated on examples of spinlock specification and a simplified specification of RCU (Read-copy-update) API.

Highlights

  • Дедуктивная верификация – это область статической верификации, в которой изучаются различные подходы к представлению условий корректности программ в соответствии с некоторыми заданными спецификациями в виде множества математических утверждений, называемых условиями верификации (УВ), с целью последующего анализа полученных УВ с помощью частично или полностью автоматизированного логического вывода

  • For Linux kernel modules one of the usual goals of deductive verification is a formal proof of the code's compliance to a specification of a synchronization discipline. We propose formalizing both the synchronization discipline and the required properties of the code in terms of ownership methodology with locally checked invariants (LCI) that was previously successfully applied for verifying the Microsoft Hyper-V Hypervisor with VCC deductive verification tool

  • To maintain good compatibility with the various specific C features and extensions used in the Linux kernel code, efficiently handle data type representations with many large nested structure definitions and provide a reacher specification language we propose using Frama-C static analysis platform with its ACSL specification language and Jessie plugin for deductive verification as these tools have shown a good applicability to verification of sequential Linux kernel code fragments in the course of the Astraver project

Read more

Summary

Введение

Дедуктивная верификация – это область статической верификации, в которой изучаются различные подходы к представлению условий корректности программ в соответствии с некоторыми заданными спецификациями в виде множества математических утверждений, называемых условиями верификации (УВ), с целью последующего анализа полученных УВ с помощью частично или полностью автоматизированного логического вывода. 49-68 достигается за счет разбиения, применяемого к результирующим УВ на нескольких уровнях, таких как, например, разбиение по путям выполнения в исходном коде, разделение памяти на непересекающимся области, раздельная проверка различных аспектов поведения фрагмента программы (безопасности (условий корректности для всех используемых операций), явно специфицированного поведения (функциональной корректности), контекстных условий для ограничения эффектов выполнения императивного кода и др.), разбиение получаемых логических формул в соответствии с их пропозициональной структурой; упрощение формул также обычно возможно благодаря некоторым дополнительным легко проверяемым предположениям, наиболее важные из которых – это системы типов и модели памяти, которые позволяют предварительно использовать высокоэффективные алгоритмы статического анализа для разрешения многих условий корректности и быстрого извлечения дополнительных полезных знаний о решаемой задаче, которые затем могут быть использованы инструментами логического вывода для ускорения решения задачи выполнимости. В данной статье предлагается предварительное описание расширения языка спецификаций ACSL, поддерживаемого платформой анализа C-программ Frama-C, набором примитивов методологии LCI, аналогичных тем, которые включены в язык спецификаций для инструмента VCC, а также приводится несколько примеров использования предлагаемых расширений для формализации примитивов синхронизации, включая модель для проверки корректности использования базовых примитивов (внешнего интерфейса) механизма синхронизации RCU, используемого в коде модулей ядра Linux

Методология владения и LCI
Методология владения и ACSL
Спин-блокитровки
Динамические утверждения
Механизм синхронизации RCU
Заключение
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call