Google выявил уязвимость, которую срочно пришлось исправлять.
В преддверии выхода ядра Linux 6.15 разработчики уже начали отправлять первые изменения Линусу Торвальдсу. Это происходит чуть раньше обычного: ожидается, что релиз версии 6.14 состоится в воскресенье, но некоторые улучшения для следующего выпуска уже готовы.
Одно из таких изменений касается важной функции безопасности ядра Linux — рандомизации кеша памяти (CONFIG_RANDOM_KMALLOC_CACHES), которая ранее работала не совсем корректно. Эту проблему обнаружили инженеры Google. Сама функция предназначена для повышения защиты от атак на уязвимости памяти. Она создает несколько копий кешей и случайным образом выбирает один из них при каждом вызове kmalloc, используя адрес возврата в качестве основы для случайного выбора.
Однако инженеры выяснили, что механизм случайного выбора на практике был сломан: в коде текущих ядер Linux для всех вызовов kvmalloc при больших размерах использовался один и тот же "случайный" ключ. Таким образом, вся дополнительная защита, которую давала эта функция, на самом деле сводилась на нет.
Разработчик компании Huawei Гун Жуйци смог разобраться в причинах ошибки и предложил решение проблемы. Он пояснил, что ключевой причиной неправильной работы рандомизации стало использование адреса возврата (RET_IP), который в некоторых ситуациях не позволяет точно определить место вызова kmalloc, особенно если вызов скрыт внутри вспомогательных функций. Чтобы устранить эту проблему, Гун предложил изменить логику вызовов в ядре: теперь функции семейства __kvmalloc_node будут напрямую вызывать внутренние реализации __do_kmalloc_node, что позволит точно фиксировать уникальные адреса вызовов и обеспечивать настоящую случайность.
Это исправление уже вошло в предварительный список обновлений для Linux 6.15. Вероятно, позже оно также будет перенесено в более старые стабильные версии ядра, чтобы повысить эффективность существующих механизмов защиты от атак.