В ядре Linux устранена следующая уязвимость:
xprtrdma: проверьте frwr_wp_create() во время подключения
frwr_wp_create() создает одноэлементную область памяти, используемую для кодирования
заполнение для фрагментов записи, длина полезных данных которых не выровнена по XDR. Это
пути отказа возвращают отрицательное значение errno и оставляют установленное значение ep->re_write_pad_mr
до НУЛЯ.
rpcrdma_xprt_connect() в настоящее время игнорирует это возвращаемое значение. Если
frwr_wp_create() завершается с ошибкой после успешной остальной части настройки соединения,
xprt_rdma_connect_worker() считает попытку подключения успешной.
и устанавливает XPRT_CONNECTED.
Более позднее чтение NFS/RDMA с невыровненным по 4 байта
длина получаемой страницы достигает rpcrdma_encode_write_list(), передает NULL
панель записи MR для encode_rdma_segment() и разыменовывает его. Это локально инициируется на клиенте NFS/RDMA после подключения или
повторное подключение попадает в локальное распределение MR, DMA-карту, MR-карту или пост-отправку
неудача; удаленный узел сам по себе не может вызвать сбой локальной настройки MR. Проверьте возвращаемое значение и завершите неудачное соединение как -ENOTCONN, соответствующее
соседние сбои настройки.
Это сохраняет XPRT_CONNECTED ясным и позволяет
повторение обычного пути повторного подключения.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: xprtrdma: Check frwr_wp_create() during connect frwr_wp_create() creates the singleton Memory Region used to encode padding for Write chunks whose payload length is not XDR-aligned. Its failure paths return a negative errno and leave ep->re_write_pad_mr set to NULL. rpcrdma_xprt_connect() currently ignores that return value. If frwr_wp_create() fails after the rest of the connection setup succeeds, xprt_rdma_connect_worker() treats the connection attempt as successful and sets XPRT_CONNECTED. A later NFS/RDMA read with a non-4-byte-aligned receive page length reaches rpcrdma_encode_write_list(), passes the NULL write-pad MR to encode_rdma_segment(), and dereferences it. This is locally triggerable on an NFS/RDMA client after a connect or reconnect hits a local MR allocation, DMA-map, MR-map, or post-send failure; a remote peer alone cannot force the local MR setup failure. Check the return value and fail the connect as -ENOTCONN, matching the adjacent setup failures. This keeps XPRT_CONNECTED clear and lets the normal reconnect path retry.