В ядре Linux устранена следующая уязвимость:
платформа/x86: ISST: проверка идентификатора сокета в clos_assoc ioctl
isst_if_clos_assoc() проверяет предоставленный пользователем идентификатор сокета с помощью
'socket_id > topology_max_packages()', но isst_common.sst_inst[]
выделено с помощью записей topology_max_packages(), поэтому допустимый диапазон индексов
равно [0, topology_max_packages()). Сравнение '>' позволяет
socket_id == topology_max_packages() передает и индексирует одну запись после
массив. Кроме того, isst_common.sst_inst[socket_id] имеет значение NULL для находящегося в диапазоне
пакет, который не имеет связанного экземпляра TPMI SST и используется указатель
без проверки NULL.
Как запись за пределами границ, так и NULL-указатель
затем разыменовываются с помощью map_partition_power_domain_id() и
после доступа к power_domain_info. Отклонить сокет_id >= topology_max_packages() и NULL sst_inst, соответствующий
проверки, уже выполненные функцией get_instance().
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: platform/x86: ISST: Validate socket ID in clos_assoc ioctl isst_if_clos_assoc() validates the user-supplied socket_id with 'socket_id > topology_max_packages()', but isst_common.sst_inst[] is allocated with topology_max_packages() entries, so the valid index range is [0, topology_max_packages()). The '>' comparison lets socket_id == topology_max_packages() pass and index one entry past the array. In addition, isst_common.sst_inst[socket_id] is NULL for an in-range package that has no bound TPMI SST instance, and the pointer is used without a NULL check. Both the out-of-bounds entry and the NULL pointer are then dereferenced by map_partition_power_domain_id() and the following power_domain_info access. Reject socket_id >= topology_max_packages() and a NULL sst_inst, matching the checks already performed by get_instance().
Характеристики атаки
Последствия
Строка CVSS v3.1