setjmp и longjmp причина отклонения от нормального потока управления
Этот дефект возникает при использовании комбинации setjmp и longjmp или sigsetjmp и siglongjmp для отклонения от нормального потока управления и выполнения нелокальных прыжков в коде.
Используя setjmp и longjmp, или sigsetjmp и siglongjmp имеет следующие риски:
Нелокальные прыжки уязвимы для атак, которые используют обычные ошибки, такие как переполнение буфера. Злоумышленники могут перенаправить поток управления и потенциально выполнить произвольный код.
Такие ресурсы, как динамически выделенная память и открытые файлы, могут не быть закрыты, что приводит к утечке ресурсов.
Если вы используете setjmp и longjmp в комбинации с обработчиком сигнала может произойти неожиданный поток управления. POSIX ® не указывает, setjmp сохраняет маску сигнала.
Используя setjmp и longjmp или sigsetjmp и siglongjmp затрудняет понимание и обслуживание программы.
Выполнение нелокальных прыжков в коде с помощью setjmp/longjmp или sigsetjmp/siglongjmp только в контекстах, где такие прыжки могут выполняться безопасно. По возможности используйте потоки POSIX.
В C++ для моделирования исключений метания и захвата используйте стандартные идиомы, такие как throw выражения и catch заявления.
| Группа: Надлежащая практика |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки: SETJMP_LONGJMP_USE |
| Воздействие: Низкий |
| ИДЕНТИФИКАТОР CWE: 691 |