LINUX.ORG.RU
 
Manhunt

Архитектура системы верификации кода драйверов Linux


0

2

В статье "Архитектура Linux Driver Verification" (PDF, 700 Кб) представлено описание применимости метода статического анализа кода для проверки корректности драйверов устройств для платформы Linux. Представленный метод позволяет выявить ошибки на основании анализа исходных текстов, без непосредственного выполнения кода. В отличие от традиционных методов тестирования статический анализ кода позволяет проследить сразу все пути выполнения программы, в том числе, редко встречающиеся и сложно воспроизводимые при динамическом тестировании.

Проект Linux Driver Verification является открытым и развивается при участии организации Linux Foundation, Института системного программирования Российской Академии Наук (ИСП РАН) и Федерального агентства РФ по науке и инновациям. Наработки проекта распространяются в рамках лицензии Apache. Дополнительно подготовлен online-сервис для проверки драйверов. Список выявленных при помощи LDV проблем можно посмотреть на данной странице.

>>> Источник

ПОСАДИ КОМПЬЮТЕР НА ЦЕПЬ И ЗАСТАВЬ ЛАЯТЬ!

домашняя автоматизация: сделай сам; лучший подарок для техногика

http://www.unicontrollers.com/products/unc01x

[#]  

Ахренеть. Этой игрушкой кто-то пользовался?

***** ()
[#] Ответ на: комментарий от Manhunt 14.11.2011 16:05:40  

> Пользовались. Вот ссылка, не будь совсем уж Ъ

Не петросянь. Я спрашиваю о том, есть ли на ЛОР живые юзеры этого LDV.

***** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 16:04:06  
www_linux_org_ru

игрушка, кхм, как ты ее назвал, там, скорее, бласт — http://mtc.epfl.ch/software-tools/blast/index-epfl.php

а они, как мне показалось при чтении по диагонали, его подзаточили под ядро

кстати — емнип один из них тут имеет аккаунт на лоре, и даже че-то рассказывал, когда речь шла о емнип http://linuxtesting.ru/project/lsb_infrastructure

**** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 16:13:21  

> игрушка, кхм, как ты ее назвал, там, скорее, бласт — http://mtc.epfl.ch/software-tools/blast/index-epfl.php

У них на странице прямо так и написано. Но мне интересно использование LDV для своих драйверов или Си-программ.

***** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 16:21:15  

Он исключительно молчалив %)

***** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 16:24:51  
www_linux_org_ru

раз его скастовали сюда, наверно можно и второй раз скастовать

а вообще я сомневаюсь, что тут на лоре кроме тебя кто-то из драйверописателей интересуется формальной верификацией

**** ()
[#]  

Статистически анализ не надежен - какой прок в прогнозе что код с вероятностью NN правильный. А ведь надо еще доказать применимость статистических гипотез к конкретному коду.

anonymous ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 16:33:05  

Насколько я понял, это средство не только для драйверописателей.

***** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 16:35:11  
www_linux_org_ru

насколько я понимаю, да

ладно, я прекращаю выступать в роли К.О., интересней почитать, че они там накрутили

**** ()
[#] Ответ на: комментарий от anonymous 14.11.2011 16:35:07  
Aceler

> какой прок в прогнозе что код с вероятностью NN правильный

Никакого. Применение статистических методов не отменяет классического тестирования. Но хуже-то тоже не будет.

***** ()
[#]  

> (ИСП РАН) и Федерального агентства РФ по науке и инновациям
>> инновациям


Превед Медвед?

()
[#]  
yoghurt

Круто

***** ()
[#] Ответ на: комментарий от anonymous 14.11.2011 16:35:07  
www_linux_org_ru

> Статистически анализ не надежен - какой прок в прогнозе что код с вероятностью NN правильный. А ведь надо еще доказать применимость статистических гипотез к конкретному коду

ты где там нашел статистические методы?

**** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 17:29:10  
dizza

[вброс]

Как мне кажется, все эти версификаторы направлены на компенсацию убогости С\С++

[/вброс]

*** ()
[#]  
r

>Список выявленных при помощи LDV проблем можно посмотреть на данной странице.

Я не понял - три десятка багов за 2 года? Это драйвера такие хорошие или инструмент....?

***** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 17:30:18  
Aceler

Хы, я тоже написал «статистического» :)

***** ()
[#] Ответ на: комментарий от dizza 14.11.2011 17:46:48  
www_linux_org_ru

> Как мне кажется, все эти версификаторы направлены на компенсацию убогости С\С++

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

**** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 18:10:04  
www_linux_org_ru

кроме того, можно не заставлять программиста тратить время — писать код обработки для ситуации, которая доказанно возникнуть не может

хотя, тут, не все так просто

**** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 18:10:04  
dizza

Ну какие проблемы, вон, некоторые жаве проверки отключают на проде. Все равно такие фичи должны быть встроены в язык.

*** ()
[#] Ответ на: комментарий от dizza 14.11.2011 17:46:48  

> Как мне кажется, все эти версификаторы направлены на компенсацию убогости С\С++

Как это ложится на проверки зависимостей? Когда что-то нужно сделать обязательно только после чего-то дрогого. Они, очень часто, чисто логические.

* ()
[#] Ответ на: комментарий от dizza 14.11.2011 17:46:48  

> все эти версификаторы направлены на компенсацию убогости

Скомпенсируй свою убогость - научись читать.

***** ()
[#]  

Институт РАН сделал что-то полезное, да к тому же для линукса?

Ущипните меня.

anonymous ()
[#] Ответ на: комментарий от x86_64 14.11.2011 18:30:31  
dizza

Ну и? Я за то, что бы системы верификации была частью языка, а не костылем. Чем язык лучше, тем у него больше встроенных средств обеспечения корректности. Хаскель, который тут любят - только цветочки.

*** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 18:32:31  
dizza

Внезапно: ходил по ссылкам в теме, почитал их сайт. Они там нечто похожее на юнит-тесты на libc написали. Цирк.

*** ()
[#] Ответ на: комментарий от dizza 14.11.2011 18:28:11  

> Ну какие проблемы, вон, некоторые жаве проверки отключают на проде. Все равно такие фичи должны быть встроены в язык.

Какие? Вызов метода/функции xxx обязательно делать только после вызова метода/функции yyy или метода/функции ййй? :)

* ()
[#] Ответ на: комментарий от x86_64 14.11.2011 18:47:34  

>> Все равно такие фичи должны быть встроены в язык.

> Какие? Вызов метода/функции xxx обязательно делать только после вызова метода/функции yyy или метода/функции ййй? :)

Почему нет?

***** ()
[#] Ответ на: комментарий от dizza 14.11.2011 18:47:21  

> Внезапно: ходил по ссылкам в теме, почитал их сайт. Они там нечто похожее на юнит-тесты на libc написали. Цирк.

Походу, ты не совсем врубаешься. Юнит тесты - это ЧАСТЬ кода, работающая в коде предназначеном для тестирования.

Здесь ВЕСЬ код драйверов прокручивается на поиск противоречий в специальной среде, эти противоречия выявляющей.

* ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 18:50:08  

>>> Все равно такие фичи должны быть встроены в язык.

>> Какие? Вызов метода/функции xxx обязательно делать только после вызова метода/функции yyy или метода/функции ййй? :)

> Почему нет?

Потому что это только примитивнейшая зависимость. Можно, конечно, такие зависимости и более сложные в язык запихнуть, но только нет таких языков и не будет. Ибо для записи таких зависимостей нужен совсем другой язык, более для этого подходящий.

* ()
[#] Ответ на: комментарий от Aceler 14.11.2011 16:42:15  

Это так тонко что даже подозрительно...

** ()
[#] Ответ на: комментарий от x86_64 14.11.2011 18:47:34  
dizza

Не, мы про спецификации разного уровня говорим. Я вот высмеиваю верификаторы низкоуровневых спецификаций, вроде запрета на выход за границы массива.

*** ()
[#] Ответ на: комментарий от www_linux_org_ru 14.11.2011 18:10:04  
vovic

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

При чём здесь формальный верификатор? Проверку инварианта на выход за границы массива должен делать компилятор. А если корректность инварианта зависит от среды исполнения, т.е. это нельзя доказать статически, то и рантаймовую проверку выкидывать нельзя.

()
[#] Ответ на: комментарий от dizza 14.11.2011 19:04:33  

> Не, мы про спецификации разного уровня говорим. Я вот высмеиваю верификаторы низкоуровневых спецификаций, вроде запрета на выход за границы массива.

В одних языках надо одно проверять. В других - другое. В общем объеме необходимых проверок - это ничего не значащая величина.

* ()
[#] Ответ на: комментарий от vovic 14.11.2011 19:07:56  

> то и рантаймовую проверку выкидывать нельзя.

Вообще-то, если среда не меняется в процессе работы, то можно. Вынести эти проверки на этап инициализации...

* ()
[#] Ответ на: комментарий от x86_64 14.11.2011 19:13:26  
vovic

>> то и рантаймовую проверку выкидывать нельзя.

> Вообще-то, если среда не меняется в процессе работы, то можно. Вынести эти проверки на этап инициализации...

От выноса проверки из цикла быть рантаймовой она не перестанет.

Кроме того, это тоже должен по-хорошему должны делать и внимательный программист, и компилятор. При чём здесь формальные верификаторы мне не понятно.

()
[#]  
Mihai-gr

Раздел "Документация"?

()
[#] Ответ на: комментарий от vovic 14.11.2011 19:19:40  

>>> то и рантаймовую проверку выкидывать нельзя.

>> Вообще-то, если среда не меняется в процессе работы, то можно. Вынести эти проверки на этап инициализации...

> От выноса проверки из цикла быть рантаймовой она не перестанет.

Только это будет уже на рантайм-проерка выхода за границы массива а рантайм-проверка на допустимост параметров системы.

> Кроме того, это тоже должен по-хорошему должны делать и внимательный программист, и компилятор. При чём здесь формальные верификаторы мне не понятно.

Вот внимательность программиста и проверяется.

* ()
[#] Ответ на: комментарий от vovic 14.11.2011 19:19:40  

> это тоже должен по-хорошему должны делать и внимательный программист, и компилятор

Особенно убедительно выглядит про "внимательного программиста".

> При чём здесь формальные верификаторы мне не понятно.

При том, что компилятор тоже может выполнять верификацию, и, следовательно, быть верификатором.

***** ()
[#] Ответ на: комментарий от x86_64 14.11.2011 19:24:30  
vovic

> Только это будет уже на рантайм-проерка выхода за границы массива а рантайм-проверка на допустимост параметров системы.

Это будет рантайм-проверка на то, выйдет ли указатель, по которому осуществляется доступ, за границы массива. То есть, по мне она так и останется "рантайм-проверкой на выход за границы массива", просто станет более умной. :-) В любом случае, это уже проблемы терминологии.

>> Кроме того, это тоже должен по-хорошему должны делать и внимательный программист, и компилятор. При чём здесь формальные верификаторы мне не понятно.

> Вот внимательность программиста и проверяется.

Вы про что? Кем проверяется? И на каком этапе - статически или в рантайме?

()
[#] Ответ на: комментарий от tailgunner 14.11.2011 19:28:48  
vovic

> При том, что компилятор тоже может выполнять верификацию, и, следовательно, быть верификатором.

Согласен. Более того, этот "верификатор"-компилятор сам стремится исправить код на более оптимальный. Но в такой формулировке верификаторами пользуются все, кто компилирует с ключом -O, отличным от нуля. Речь ведь изначально шла про верификацию во время исполнения кода, а не статическими средствами, не?

()
[#] Ответ на: комментарий от vovic 14.11.2011 19:44:45  

> в такой формулировке верификаторами пользуются все, кто компилирует с ключом -O, отличным от нуля

Простым, нерасширяемым верификатором.

> Речь ведь изначально шла про верификацию во время исполнения кода

Видимо, я пропустил момент, когда разговор о статической верификации перешел в разговор о динамической (более того, я впервые слышу о "динамической верификации" %)).

***** ()
[#]  
rtvd

<вброс>

Линукс - ре-ше-то :)

</вброс>

*** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 19:47:37  

>> в такой формулировке верификаторами пользуются все, кто компилирует с ключом -O, отличным от нуля

> Простым, нерасширяемым верификатором.

Хм... вот насчет нерасширяемости - теперь не верно. Теперь же можно скрипты на питоне писать для gcc. С доступом ко внутренним структурам. Теоритически туда любые проверки запихать можно.

* ()
[#]  

А кто-нибудь уже нашел, где у них собственно список проверяемых правил?

***** ()
[#] Ответ на: комментарий от x86_64 14.11.2011 19:55:18  

> вот насчет нерасширяемости - теперь не верно.

Всё еще верно.

> Теперь же можно скрипты на питоне писать для gcc

Это уже не компилятор, а чекер на основе компиляторного промежуточного представления.

***** ()
[#] Ответ на: комментарий от tailgunner 14.11.2011 19:47:37  
vovic

> Видимо, я пропустил момент, когда разговор о статической верификации перешел в разговор о динамической (более того, я впервые слышу о "динамической верификации" %)).

Статью из новости я, естественно, не читал, однако если правильно помню, их система верификации именно динамическая, по крайней мере, как я бы её назвал (хотя честно признаю, что в этом не разбираюсь): Код драйвера "чистится" от "ядерных" особенностей, инструментируется проверками на блокировки/разблокировки/что ещё они там проверяют, для полученного кода строится набор тестов, покрывающий все возможные варианты его работы, после чего "вычищенный" и инструментированный драйвер (т.е. уже по сути дела не драйвер, а инструментированный чекер с идентичной структурой кода) запускается на всех этих тестах. Раз код (пусть и модифицированный) запускается и вставленные проверки осуществляются во время исполнения - значит, динамическая(рантаймовая) верификация.

Поправьте, что не так.

()