В ядре Linux устранена следующая уязвимость: dm: зафиксировать перелив буфера при обработке витт Тони Аслесон (используя Клода) обнаружил п…
В ядре Linux устранена следующая уязвимость: dm: зафиксировать перелив буфера при обработке витт Тони Аслесон (используя Клода) обнаружил переполнение буфера в dm-ioctl в функция retrieve_status: 1. Код в retrieve_status проверяет, что строка вывода вписывается в буфер вывода и записать строку вывода там 2. 2. Затем код выравнивает переменную «outptr» на следующую 8-байтную граница: outptr = align_ptr(outptr); 3. 3. Выравнивание не проверяет переполнение, поэтому выход может указать мимо Буферный конец 4. Цикл «за» снова итерируется, он выполняет: оставшийся = len - (outptr - outbuf); 5. Если «outptr» указывает мимо «outbuff + len», арифметика оборачивается вокруг и переменная "оставшаяся" содержит необычно высокое число 6. 6. Поскольку «остающийся» высокий, код записывает больше данных после конца буфер К счастью, этот баг не имеет последствий для безопасности, потому что: 1. Только корень может выдавать устройства mapper ioctls 2. 2. Широко используемые библиотеки, которые общаются с картографом устройства (libdevmapper и devicemapper-rs) используйте размер буфера, который выровнен с 8 байт - таким образом, "outpr = align_ptr(outptr)" не может превысить вход буфер и баг не может произойти случайно