В ядре Linux устранена следующая уязвимость:
net: qrtr: исправлено переполнение 32-битного целого числа в qrtr_endpoint_post().
qrtr_endpoint_post() проверяет входящий пакет с помощью
if (!size || len != ALIGN(size, 4) + hdrlen)
перейти к ошибке;
где размер зависит от провода. В 32-битной версии size_t равен 32 битам и
ALIGN(size, 4) переносится в 0 для размера >= 0xffffffd, поэтому проверка
проходит, и skb_put_data(skb, data + hdrlen, size) записывает мимо
skb размером с hdrlen и упс ядра. 64-битная версия не затрагивается. Это 32-битный остаток ad9d24c9429e2 ("net: qrtr: fix OOB
Прочтите в qrtr_endpoint_post"), где исправлен только 64-битный случай.
Отклонить любой размер, который не может поместиться в буфер до ALIGN.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: qrtr: fix 32-bit integer overflow in qrtr_endpoint_post() qrtr_endpoint_post() validates an incoming packet with if (!size || len != ALIGN(size, 4) + hdrlen) goto err; where size comes from the wire. On 32-bit, size_t is 32 bits and ALIGN(size, 4) wraps to 0 for size >= 0xfffffffd, so the check passes and skb_put_data(skb, data + hdrlen, size) writes past the hdrlen-sized skb and oopses the kernel. 64-bit is unaffected. This is the 32-bit residual of ad9d24c9429e2 ("net: qrtr: fix OOB Read in qrtr_endpoint_post"), which fixed only the 64-bit case. Reject any size that cannot fit the buffer before the ALIGN.
Характеристики атаки
Последствия
Строка CVSS v3.1