Пользователи компьютерной игры Witcher 2 столкнулись (http://steamcommunity.com/app/20920/discussions/0/6207009602.../) с невозможностью запуска приложения на системах с новыми ядрами Linux. В частности, наблюдается крах при запуске игры в окружении ядра 3.17.7 и более новых выпусков. После анализа ситуации разработчики выяснили (https://github.com/KillaW0lf04/The-Witcher-2-Issues/issues/89), что причиной являются добавленные в недавних выпусках ядра дополнительные проверки параметров задания системного вызова "set_thread_area".
Линус Торвальдс присоединился (https://github.com/KillaW0lf04/The-Witcher-2-Issues/issues/8...) к дискуссии и подтвердил свою приверженность принципу (http://www.opennet.ru/opennews/art.shtml?num=34738) сохранения полной совместимости с приложениями, заключающемуся в том, что программные интерфейсы должны обеспечивать обратную совместимость и никакие изменения в ядре не должны нарушать корректную работу пользовательских приложений. Чтобы недопустить подобные инциденты с играми в будущем Линус посоветовал ответственным за тестирования ядра разработчикам включить игровые приложения в число проверяемых программ, а разработчикам проприетарных игр более активно сотрудничать с разработчиками ядра и сразу сообщать о всех возникших проблемах. В качестве решения проблемы с Witcher 2 Линус намерен смягчить добавленные в системный вызов ограничения "set_thread_area" или организовать жесткие проверки только для серверных систем.
Неодназначность ситуации заключается в том, что добавление дополнительных проверок параметров системного вызова "set_thread_area" было осуществлено (https://github.com/KillaW0lf04/The-Witcher-2-Issues/issues/8...) в рамках устранения выявленных (http://www.opennet.ru/opennews/art.shtml?num=41276) в декабре критических уязвимостей (CVE-2014-9322 (https://access.redhat.com/security/cve/CVE-2014-9322), CVE-2014-9090 (https://access.redhat.com/security/cve/CVE-2014-9090)) и данные проверки необходимы для предотвращения атак, которые могут привести к повышению привилегий в системе. При этом старое поведение системного вызова формально являлось корректным и использовалось в том числе разработчиками игры Witcher 2 (подобные манипуляции с LDT используются (https://gitorious.org/linux-test-utils/linux-clock-tests/sou...) в эксплоите).
Таким образом возникла дилемма: сохранить совместимость, но оставить потенциальную уязвимость, или устранить вектор атаки, но нарушить совместимость программных интерфейсов. В случае с игрой Witcher удалось найти компромиссное обходное решение и подготовить патчи (https://git.kernel.org/cgit/linux/kernel/git/luto/linux.git/...), воспринимающие передачу структуры user_desc со всеми нулевыми значениями как операцию поиска свободного слота, и не проводить в этом случае заполнение сегмента TLS.
URL: https://github.com/KillaW0lf04/The-Witcher-2-Issues/issues/8...
Новость: http://www.opennet.ru/opennews/art.shtml?num=41528