В ядре Linux устранена следующая уязвимость:
RDMA/irdma: исправлено чтение OOB во время регистрации CQ MR. Сашико указала на несвязанную ошибку в предыдущем патче:
https://sashiko.dev/#/patchset/20260512183852.614045-1-jmoroni%40google.com
Это изменение исправляет ошибку, устраняя поле cqmr->split, которое
не был установлен должным образом и вместо этого просто проверяет изменение размера CQ
флаг функции напрямую. Поле разделения cqmr->по существу отслеживает, является ли IRDMA_FEATURE_CQ_RESIZE
установлен, но он не был установлен до момента создания CQ, то есть _after_
Регистрация в памяти CQ (единственное место, где на него ссылаются).
В результате во время регистрации MR оно всегда будет ложным и будет
поэтому заставьте irdma_handle_q_mem заполнить cqmr->shadow даже для GEN_2
Аппаратное обеспечение и не только:
cqmr->shadow = (dma_addr_t)arr[req->cq_pages];
Проблема в том, что для GEN_2 и более поздних версий req->cq_pages может быть точно равным.
равно iwmr->page_cnt и, следовательно, равен размеру arr, что приведет к
OOB, прочитанный одним.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: RDMA/irdma: Fix OOB read during CQ MR registration Sashiko pointed out an unrelated bug during a previous patch: https://sashiko.dev/#/patchset/20260512183852.614045-1-jmoroni%40google.com This change fixes the bug by eliminating the cqmr->split field which was not being set properly and instead just checks the CQ resize feature flag directly. The cqmr->split field essentially tracks whether IRDMA_FEATURE_CQ_RESIZE is set, but it was not being set until CQ creation time, which is _after_ CQ memory registration (the only other place where it is referenced). As a result, it would always be false during MR registration and would therefore cause irdma_handle_q_mem to populate cqmr->shadow even for GEN_2 HW and beyond: cqmr->shadow = (dma_addr_t)arr[req->cq_pages]; The issue is that for GEN_2 and beyond, req->cq_pages may be exactly equal to iwmr->page_cnt and therefore equal to the size of arr, which would cause an OOB read by one.