Несколько задач делают незащищенные вызовы небезопасной для потока стандартной функции библиотеки
Этот дефект возникает, когда:
Несколько задач вызывают одну и ту же стандартную функцию библиотеки.
Например, несколько задач вызывают strerror
функция.
Вызовы не защищены с помощью общей защиты.
Например, вызовы не защищены одной и той же критической секцией.
Функции, отмеченные этим дефектом, не гарантированы как входящие. Функция повторяется, если ее можно прервать и безопасно вызвать снова, прежде чем ее предыдущий вызов завершит выполнение. Если функция не является входящей, несколько задач, вызывающих функцию без защиты, могут вызвать проблемы параллелизма. Список функций, которые помечены, см. в CON33-C: Избегайте условий расы при использовании функций библиотеки.
Чтобы найти этот дефект, перед анализом необходимо задать опции многозадачности. Чтобы задать эти опции, на панели Configuration выберите Multitasking. Для получения дополнительной информации смотрите Настройка многозадачного анализа Polyspace вручную.
Функции, помеченные этим дефектом, не входят, потому что в их реализациях могут использоваться глобальные или статические переменные. Когда несколько задач вызывают функцию без защиты, вызов функции из одной задачи может помешать вызову из другой задачи. Два вызова функции могут одновременно получить доступ к глобальным или статическим переменным и вызвать непредсказуемые результаты.
Вызовы могут также вызвать более серьезные уязвимости безопасности, такие как ненормальное завершение, атака отказа в обслуживании и нарушения целостности данных.
Чтобы исправить этот дефект, выполните одно из следующих действий:
Используйте повторную версию стандартной функции библиотеки, если она существует.
Для образца вместо strerror()
, использовать strerror_r()
или strerror_s()
. Альтернативы функциям, отмеченным этим дефектом, см. в документации для CON33-C.
Защитите вызовы функций, используя общие критические разделы или временное исключение.
См. Critical section details (-critical-section-begin -critical-section-end)
и Temporally exclusive tasks (-temporal-exclusions-file)
.
Чтобы идентифицировать существующие защиты, которые можно повторно использовать, смотрите таблицу и графики, связанные с результатом. В таблице показаны каждая пара конфликтующих вызовов. В Access Protections столбце показаны существующие средства защиты вызовов. Чтобы увидеть последовательность вызовов функций, ведущую к конфликтам, щелкните значок. Пример см. ниже.
Группа: Параллелизм |
Язык: C | C++ |
По умолчанию: On |
Синтаксис командной строки: DATA_RACE_STD_LIB |
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE: 366, 413 |
Configure multitasking manually
| Critical section details (-critical-section-begin -critical-section-end)
| Data race
| Data race including atomic operations
| Destruction of locked mutex
| Double lock
| Double unlock
| Find defects (-checkers)
| Missing lock
| Missing unlock
| Tasks (-entry-points)
| Temporally exclusive tasks (-temporal-exclusions-file)