Проект LLVM развивает средства для безопасной работы с буферами в C++
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Разработчики проекта LLVM предложили ряд изменений, направленных на усиление безопасности критически важных проектов на языке C++ и предоставление средств для исключения ошибок, вызванных выходом за допустимые границы буферов. Работа сосредоточена в двух направлениях: предоставление модели разработки, позволяющей безопасно работать с буферами, и проведение работы по усилению защиты стандартной библиотеки функций libc++.
Предлагаемая модель безопасного программирования для C++ предполагает использование предоставляемых стандартной библиотекой классов при работе с буферами вместо манипуляций с голыми указателями. Например, предлагается использовать классы std::array, std::vector и std::span, в которые будет добавлена проверка выхода за границы выделенной памяти, производимая во время выполнения.
Для борьбы с опасными приёмами программирования в clang предлагается выводить предупреждения компилятора для всех арифметических операций с указателями, похожие на предупреждения linter-а clang-tidy, выводимые при использовании флага "cppcoreguidelines-pro-bounds-pointer-arithmetic", поддержка которого появится в выпуске LLVM 16. Для включения подобных предупреждений в clang будет добавлен отдельный флаг, не активный по умолчанию.
В libc++ планируется реализовать опциональный режим усиленной защиты, при включении которого во время выполнения будут отлавливаться некоторые ситуации, приводящие к неопределённому поведению. Например, в классах std::span и std::vector будет отслеживаться обращение за пределы выделенной области памяти, в случае выявления которого программа будет аварийно завершаться. Разработчики считают, что добавление подобных изменений сохранит соответствие libc++ стандартам C++, так как выбор метода обработки случаев неопределённого поведения лежит на разработчиках библиотеки, которые могут в том числе трактовать неопределённое поведение как сбой, требующих завершения работы программы.
Производимые во время выполнения проверки в libc++ планируют разделить на категории, которые можно будет включать по отдельности. Некоторые из предложенных проверок, которые не приводят к усложнению операций или изменению ABI, уже реализованы в рамках безопасного режима libc++ (safe mode).
Дополнительно планируется подготовить инструментарий для корректировки кода, позволяющий заменять переменные с голыми указателями на контейнеры и применять альтернативные обработчики в ситуациях, когда контейнер не может напрямую заменить указатель (например, конструкция "if(array_pointer)" может быть преобразована в "if(span.data()"). Корректировки могут применяться не только к локальным переменным, но и к параметрам типов с указателями.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://discourse.llvm.org/t/r...)
- OpenNews: Google занялся продвижением средств безопасной работы с памятью в открытом ПО
- OpenNews: 70% проблем с безопасностью в Chromium вызваны ошибками при работе с памятью
- OpenNews: Компания Akamai предложила безопасную систему распределения памяти для OpenSSL
- OpenNews: Повышение безопасности Linux-ядра через использование страниц памяти, доступных только для чтения
- OpenNews: Кейс Кук из Google призвал модернизировать процесс работы над ошибками в ядре Linux
Похожие новости:
- Релиз набора компиляторов LLVM 15.0
- Яндекс открыл код фреймворка userver для создания высоконагруженных приложений
- Выпуск cppcheck 2.7, статического анализатора кода для языков C++ и С
- Проект LLVM переходит со списков рассылки на платформу Discourse
- Выпуск новой версии статического анализатора кода для языков C++ и С cppcheck 2.6
- Релиз набора компиляторов LLVM 13.0
- [Программирование, Компиляторы] Почему я прекратил разработку своего старого языка программирования и создал новый
- [Программирование, Компиляторы] Использование библиотеки LLVM для генерации кода регулярных выражений
- [*nix, Лайфхаки для гиков] Mein Konfig: экскурсия по dotfiles (часть 2)
- [*nix, Лайфхаки для гиков] Mein Konfig: экскурсия по dotfiles
Теги для поиска: #_llvm, #_buffer, #_cpp
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:19
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Разработчики проекта LLVM предложили ряд изменений, направленных на усиление безопасности критически важных проектов на языке C++ и предоставление средств для исключения ошибок, вызванных выходом за допустимые границы буферов. Работа сосредоточена в двух направлениях: предоставление модели разработки, позволяющей безопасно работать с буферами, и проведение работы по усилению защиты стандартной библиотеки функций libc++. Предлагаемая модель безопасного программирования для C++ предполагает использование предоставляемых стандартной библиотекой классов при работе с буферами вместо манипуляций с голыми указателями. Например, предлагается использовать классы std::array, std::vector и std::span, в которые будет добавлена проверка выхода за границы выделенной памяти, производимая во время выполнения. Для борьбы с опасными приёмами программирования в clang предлагается выводить предупреждения компилятора для всех арифметических операций с указателями, похожие на предупреждения linter-а clang-tidy, выводимые при использовании флага "cppcoreguidelines-pro-bounds-pointer-arithmetic", поддержка которого появится в выпуске LLVM 16. Для включения подобных предупреждений в clang будет добавлен отдельный флаг, не активный по умолчанию. В libc++ планируется реализовать опциональный режим усиленной защиты, при включении которого во время выполнения будут отлавливаться некоторые ситуации, приводящие к неопределённому поведению. Например, в классах std::span и std::vector будет отслеживаться обращение за пределы выделенной области памяти, в случае выявления которого программа будет аварийно завершаться. Разработчики считают, что добавление подобных изменений сохранит соответствие libc++ стандартам C++, так как выбор метода обработки случаев неопределённого поведения лежит на разработчиках библиотеки, которые могут в том числе трактовать неопределённое поведение как сбой, требующих завершения работы программы. Производимые во время выполнения проверки в libc++ планируют разделить на категории, которые можно будет включать по отдельности. Некоторые из предложенных проверок, которые не приводят к усложнению операций или изменению ABI, уже реализованы в рамках безопасного режима libc++ (safe mode). Дополнительно планируется подготовить инструментарий для корректировки кода, позволяющий заменять переменные с голыми указателями на контейнеры и применять альтернативные обработчики в ситуациях, когда контейнер не может напрямую заменить указатель (например, конструкция "if(array_pointer)" может быть преобразована в "if(span.data()"). Корректировки могут применяться не только к локальным переменным, но и к параметрам типов с указателями. =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:19
Часовой пояс: UTC + 5