lkml.org 
[lkml]   [2021]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [patch v8 3/7] nbd: check sock index in nbd_read_stat()
    From
    Date
    On 2021/09/22 17:22, Ming Lei wrote:
    > On Sun, Sep 19, 2021 at 06:34:28PM +0800, yukuai (C) wrote:
    >> On 2021/09/16 17:33, Yu Kuai wrote:
    >>> 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 <yukuai3@huawei.com>
    >>> ---
    >>> 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

    \
     
     \ /
      Last update: 2021-09-22 14:22    [W:3.118 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site