В ядре Linux устранена следующая уязвимость:
selinux: требует определения каждого логического значения
p_bools.nprim берется из образа политики независимо от того, сколько
за ним следуют логические значения, а cond_index_bool() заполняет bool_val_to_struct[] в
значение - 1, поэтому счетчик, превышающий имеющиеся значения, оставляет записи NULL. Каждый пользователь этого массива затем просматривает его по индексу и разыменовывает каждый
запись: cond_evaluate_expr() на пути вектора доступа,
Security_get_bools() и security_get_bool_value() за selinuxfs и
Security_set_bools(). Разреженное значение класса поглощается
policydb_class_isvalid() и его братья и сестры; у логических значений такого нет
предикат и нет потребителя, который мог бы его использовать.
Отклонить логическое значение, которое не определяет ни одно логическое значение, один раз, где массив построен. Соответствующие политики определяют каждое объявленное ими логическое значение и незатронутый.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: selinux: require every boolean value to be defined p_bools.nprim comes from the policy image independently of how many booleans follow it, and cond_index_bool() fills bool_val_to_struct[] at value - 1, so a count larger than the values present leaves NULL entries. Every user of that array then walks it by index and dereferences each entry: cond_evaluate_expr() on the access-vector path, security_get_bools() and security_get_bool_value() behind selinuxfs, and security_set_bools(). A sparse class value is absorbed by policydb_class_isvalid() and its siblings; booleans have no such predicate, and no consumer that could use one. Reject a boolean value that no boolean defines, once, where the array is built. Conforming policies define every boolean they declare and are unaffected.