Обновление Sudo 1.9.17p2 с устранением ошибки, отправлявшей SIGHUP всем процессам

Доступен новый выпуск утилиты sudo 1.9.17p2, используемой для организации выполнения команд от имени других пользователей. В новом выпуске устранена проблема, приводившая при определённом стечении обстоятельств к отправке сигнала SUGHUB (завершение работы) не запущенному процессу, а всем процессам в системе.

Проблема проявляется начиная с выпуска sudo 1.9.16 и вызвана использованием в отдельных случаях функции killpg() вместо kill() для завершения дочернего процесса. В отличие от функции kill() функция killpg() отправляет сигнал группе процессов, но в качестве группы может обрабатывать значения больше или равные 0. При передаче отрицательного значения группы поведение не определено и в некоторых системах может приводить к отправке сигнала процессу с номером 1 (init) и завершению работы всех процессов в системе.

В sudo может возникнуть ситуация, когда при запуске команды в псевдотерминале (PTY) команда не может быть корректно запущена и вместо PID библиотечные функции возвращают код ошибки “-1”.
Для отзыва доступа к терминалу в sudo запускается функция revoke_pty, которая использует в качестве идентификатора группы PID процесса при вызове функции killpg без должного анализа возвращённого ранее кода ошибки, что приводит в итоге к выполнению “killpg(-1, SIGHUP)”.

Кроме того, в sudo исправлена проблема, приводящая к сбою при перехвате и проверке запускаемых команд в конфигурациях, использующих опции intercept и intercept_verify в файле sudoers. В Linux-системах, поддерживающих функцию ptrace_readv_string(), наблюдалось аварийное завершение процессов, размер аргументов командной строки или переменных окружения у которых превышал размер страницы памяти (обычно 4096 байт).

Release. Ссылка here.