Thread (30 messages) 30 messages, 6 authors, 2021-10-17

Re: [patch v8 3/7] nbd: check sock index in nbd_read_stat()

From: yukuai (C) <hidden>
Date: 2021-09-22 12:21:42
Also in: lkml

On 2021/09/22 17:22, Ming Lei wrote:
On Sun, Sep 19, 2021 at 06:34:28PM +0800, yukuai (C) wrote:
quoted
On 2021/09/16 17:33, Yu Kuai wrote:
quoted
The sock that clent send request in nbd_send_cmd() and receive reply
in nbd_read_stat() should be the same.

Signed-off-by: Yu Kuai <redacted>
---
   drivers/block/nbd.c | 4 ++++
   1 file changed, 4 insertions(+)
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 614c6ab2b8fe..c724a5bd7fa4 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -746,6 +746,10 @@ static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd, int index)
   		ret = -ENOENT;
   		goto out;
   	}
+	if (cmd->index != index) {
+		dev_err(disk_to_dev(nbd->disk), "Unexpected reply %d from different sock %d (expected %d)",
+			tag, index, cmd->index);
+	}
   	if (cmd->cmd_cookie != nbd_handle_to_cookie(handle)) {
   		dev_err(disk_to_dev(nbd->disk), "Double reply on req %p, cmd_cookie %u, handle cookie %u\n",
   			req, cmd->cmd_cookie, nbd_handle_to_cookie(handle));
Hi, Ming

Any suggestions about this patch?
I think this one relies on nbd protocol between server and client, and
does the protocol require both request and reply xmitted via same
socket?
I searched nbd-server source code, and found that socket_read() and
send_reply->socket_write() are always come in pares and using the same
socket.

BTW, if server reply a read request from a unexpected sock, then
nbd_read_stat() might stuck in receiving the read data. And for worse,
nbd_read_stat() can mistake the normal reply message for the read data
afterwards and corrupt client.

Thanks,
Kuai
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help