[lvc-project] [PATCH 5.10] smb: client: fix smbdirect_recv_io leak in smbd_negotiate() error path
Fedor Pchelkin
pchelkin at ispras.ru
Fri Oct 31 11:05:00 MSK 2025
On Fri, 31. Oct 10:38, Andrey Troshin wrote:
> Добрый день, не понял описание проблемы, опишите пожалуйста подробнее.
> Ну и опишите пожалуйста что требуется с нашей стороны (проверка этой гипотезы/репатч)...
Добавляемый put_receive_buffer() будет повторно делать ib_dma_unmap_single()
после того как это уже сделал smbd_post_recv() при обработке ошибки
внутри себя.
smbd_negotiate()
smbd_post_recv()
if (rc) {
ib_dma_unmap_single()
if (rc)
put_receive_buffer()
ib_dma_unmap_single() // incorrect
С Вашей стороны требуется анализ исправлений при их портировании в
стабильную ветку. В данном случае, портируемый патч может содержать уже
свою проблему.
В апстриме всё же эту проблему похоже решили, стоит обратить внимание на
коммит 047682c370b6 ("smb: client: make sure we call ib_dma_unmap_single()
only if we called ib_dma_map_single already"). В 5.10 будет корректно
затаскивать серию из двух патчей, где бэкпорт 047682c370b6 идёт первым.
>
>
>
> ----------------
>
> Кому: Andrey Troshin (drtrosh at yandex-team.ru);
>
> Копия: lvc-project at linuxtesting.org;
>
> Тема: [lvc-project] [PATCH 5.10] smb: client: fix smbdirect_recv_io leak in smbd_negotiate() error path;
>
> 30.10.2025, 16:59, "Fedor Pchelkin" <pchelkin at ispras.ru>:
>
> On Thu, 30. Oct 10:43, Andrey Troshin wrote:
>
> @@ -1083,8 +1083,10 @@ static int smbd_negotiate(struct smbd_connection *info)
> log_rdma_event(INFO, "smbd_post_recv rc=%d iov.addr=%llx iov.length=%x iov.lkey=%x\n",
> rc, response->sge.addr,
> response->sge.length, response->sge.lkey);
> - if (rc)
> + if (rc) {
> + put_receive_buffer(info, response);
>
> Вижу здесь потенциальный баг в upstream-коммите.
> smbd_post_recv() на одном из своих путей обработки ошибки размапливает
> участок памяти с ib_dma_unmap_single(). Добавляемый put_receive_buffer()
> тоже это делает.
>
> return rc;
> + }
>
> init_completion(&info->negotiate_completion);
> info->negotiate_done = false;
> --
> 2.34.1
More information about the lvc-project
mailing list