Skip to content

Commit 84ff995

Browse files
metze-sambasmfrench
authored andcommitted
smb: server: avoid double-free in smb_direct_free_sendmsg after smb_direct_flush_send_list()
smb_direct_flush_send_list() already calls smb_direct_free_sendmsg(), so we should not call it again after post_sendmsg() moved it to the batch list. Reported-by: Ruikai Peng <ruikai@pwno.io> Closes: https://lore.kernel.org/linux-cifs/CAFD3drNOSJ05y3A+jNXSDxW-2w09KHQ0DivhxQ_pcc7immVVOQ@mail.gmail.com/ Fixes: 34abd40 ("smb: server: make use of smbdirect_socket.send_io.bcredits") Cc: stable@kernel.org Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Ruikai Peng <ruikai@pwno.io> Cc: Sergey Senozhatsky <senozhatsky@chromium.org> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Cc: security@kernel.org Signed-off-by: Stefan Metzmacher <metze@samba.org> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org> Tested-by: Ruikai Peng <ruikai@pwno.io> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 27b7c3e commit 84ff995

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

fs/smb/server/transport_rdma.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1588,15 +1588,21 @@ static int smb_direct_post_send_data(struct smbdirect_socket *sc,
15881588
if (ret)
15891589
goto err;
15901590

1591+
/*
1592+
* From here msg is moved to send_ctx
1593+
* and we should not free it explicitly.
1594+
*/
1595+
15911596
if (send_ctx == &_send_ctx) {
15921597
ret = smb_direct_flush_send_list(sc, send_ctx, true);
15931598
if (ret)
1594-
goto err;
1599+
goto flush_failed;
15951600
}
15961601

15971602
return 0;
15981603
err:
15991604
smb_direct_free_sendmsg(sc, msg);
1605+
flush_failed:
16001606
header_failed:
16011607
atomic_inc(&sc->send_io.credits.count);
16021608
credit_failed:

0 commit comments

Comments
 (0)