В ядре Linux устранена следующая уязвимость:
f2fs: исправлен доступ за пределами границ атрибута sysfs для чтения/записи. Некоторые атрибуты f2fs sysfs страдают от доступа к памяти за пределами допустимого диапазона и
некорректная обработка целочисленных значений, размер которых не равен 4 байтам. Например:
vm:~# echo 65537 > /sys/fs/f2fs/vde/carve_out
vm:~# cat /sys/fs/f2fs/vde/carve_out
65537
vm:~# echo 4294967297 > /sys/fs/f2fs/vde/atgc_age_threshold
vm:~# cat /sys/fs/f2fs/vde/atgc_age_threshold
1
carve_out сопоставляется с {struct f2fs_sb_info}->carve_out, который является 8-битным
целое число.
Однако интерфейс sysfs позволяет установить для него значение
больше 255, что приводит к обновлению за пределами допустимого диапазона.
atgc_age_threshold сопоставляется с {struct atgc_management}->age_threshold,
которое представляет собой 64-битное целое число, но его интерфейс sysfs не может правильно установить
значения больше UINT_MAX. Коренными причинами являются:
1. __sbi_store() рассматривает все значения по умолчанию как беззнаковое целое число, что
предотвращает обновление целых чисел размером более 4 байтов и приводит к выходу за пределы
записывает целые числа размером менее 4 байт.
2. f2fs_sbi_show() также предполагает, что все значения по умолчанию — беззнаковое целое число,
что приводит к чтению за пределами границ и неправильному доступу к целым числам большего размера.
чем 4 байта. Этот патч вводит {struct f2fs_attr}->size для записи фактического размера.
целого числа, связанного с каждым атрибутом sysfs.
С этим информации, операции чтения и записи sysfs могут правильно получить доступ и обновлять значения в соответствии с их реальным размером данных, избегая использования памяти коррупция и сокращение.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: f2fs: fix out-of-bounds access in sysfs attribute read/write Some f2fs sysfs attributes suffer from out-of-bounds memory access and incorrect handling of integer values whose size is not 4 bytes. For example: vm:~# echo 65537 > /sys/fs/f2fs/vde/carve_out vm:~# cat /sys/fs/f2fs/vde/carve_out 65537 vm:~# echo 4294967297 > /sys/fs/f2fs/vde/atgc_age_threshold vm:~# cat /sys/fs/f2fs/vde/atgc_age_threshold 1 carve_out maps to {struct f2fs_sb_info}->carve_out, which is a 8-bit integer. However, the sysfs interface allows setting it to a value larger than 255, resulting in an out-of-range update. atgc_age_threshold maps to {struct atgc_management}->age_threshold, which is a 64-bit integer, but its sysfs interface cannot correctly set values larger than UINT_MAX. The root causes are: 1. __sbi_store() treats all default values as unsigned int, which prevents updating integers larger than 4 bytes and causes out-of-bounds writes for integers smaller than 4 bytes. 2. f2fs_sbi_show() also assumes all default values are unsigned int, leading to out-of-bounds reads and incorrect access to integers larger than 4 bytes. This patch introduces {struct f2fs_attr}->size to record the actual size of the integer associated with each sysfs attribute. With this information, sysfs read and write operations can correctly access and update values according to their real data size, avoiding memory corruption and truncation.