• E
    nbd: Don't mishandle unaligned client requests · df7b97ff
    Eric Blake 提交于
    The NBD protocol does not (yet) force any alignment constraints
    on clients.  Even though qemu NBD clients always send requests
    that are aligned to 512 bytes, we must be prepared for non-qemu
    clients that don't care about alignment (even if it means they
    are less efficient).  Our use of blk_read() and blk_write() was
    silently operating on the wrong file offsets when the client
    made an unaligned request, corrupting the client's data (but
    as the client already has control over the file we are serving,
    I don't think it is a security hole, per se, just a data
    corruption bug).
    
    Note that in the case of NBD_CMD_READ, an unaligned length could
    cause us to return up to 511 bytes of uninitialized trailing
    garbage from blk_try_blockalign() - hopefully nothing sensitive
    from the heap's prior usage is ever leaked in that manner.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NKevin Wolf <kwolf@redhat.com>
    Reviewed-by: NFam Zheng <famz@redhat.com>
    Tested-by: NKevin Wolf <kwolf@redhat.com>
    Message-id: 1461249750-31928-1-git-send-email-eblake@redhat.com
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    df7b97ff
server.c 33.4 KB