Вызов прерванной функции вызывает неопределенное поведение программы
Этот дефект возникает, когда обработчик сигнала вызывает функцию, которая не является асинхронно-безопасной в соответствии со стандартом C. Асинхронно-безопасная функция может быть прервана в любой момент ее выполнения, затем вызвана снова, не вызывая противоречивого состояния. Он также может правильно обрабатывать глобальные данные, которые могут находиться в несогласованном состоянии.
При выборе функции checker, вызываемой из обработчика сигналов, которая не является асинхронно-безопасной, программа checker обнаруживает вызовы функций, которые не являются асинхронно-безопасными в соответствии со стандартом POSIX. Функция, вызываемая из обработчика сигнала, не является асинхронно-безопасной (строгой), не вызывает дефекта в этих случаях. Функция, вызываемая из обработчика сигнала, не является асинхронно-безопасной (строгой), вызывает дефект для функций, которые являются асинхронно-безопасными в соответствии со стандартом POSIX, но не в соответствии со стандартом C.
Если обработчик сигнала вызывает другую функцию, которая вызывает асинхронно-небезопасную функцию, дефект появляется в вызове функции в обработчике сигнала. Трассировка дефектов показывает полный путь от обработчика сигнала к функции асинхронной безопасности.
При вызове обработчика сигнала выполнение программы прерывается. После завершения работы обработчика выполнение программы возобновляется в точке прерывания. Если функция выполняется во время прерывания, вызов ее из обработчика сигнала является неопределенным поведением, если только она не является асинхронно-безопасной.
Стандарт C определяет следующие функции как асинхронно-безопасные. Можно вызвать следующие функции из обработчика сигнала:
abort()
_Exit()
quick_exit()
signal()
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
SIG_HANDLER_ASYNC_UNSAFE_STRICT
|
| Воздействие: среднее |
| CWE ID: 364, 387, 413, 479, 663, 828 |
Find defects (-checkers) | Function called from signal handler not asynchronous-safe | Shared data access within signal handler | Signal call from within signal handler