В ядре Linux устранена следующая уязвимость:
selinux: не отменять преобразование политики, которое никогда не начиналось
sel_write_load() вызывает selinux_policy_cancel(), когда sel_make_policy_nodes()
происходит сбой, и этот помощник разыменовывает исходящую политику, чтобы отменить ее.
преобразование сидтаба. При первой загрузке политики исходящая политика отсутствует:
Security_load_policy() в этом случае возвращает результат раньше, прежде чем он преобразует
ничего, а состояние->политика по-прежнему равно NULL. Первая загрузка, которая не удалась, пока
поэтому построение дерева selinuxfs требует разыменования NULL в
selinux_policy_cancel(), полученный при записи (2) в /sys/fs/selinux/load.
Пропустить отмену, если старой политики нет, зеркально отразив проверку.
Security_load_policy() уже выполняет до преобразования.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: selinux: do not cancel a policy conversion that never started sel_write_load() calls selinux_policy_cancel() when sel_make_policy_nodes() fails, and that helper dereferences the outgoing policy to cancel its sidtab conversion. On the first policy load there is no outgoing policy: security_load_policy() returns early for that case, before it converts anything, and state->policy is still NULL. A first load that fails while building the selinuxfs tree therefore takes a NULL dereference in selinux_policy_cancel(), reached from a write(2) to /sys/fs/selinux/load. Skip the cancel when there is no old policy, mirroring the check security_load_policy() already makes before it converts.