On 03/12/2018 08:13 AM, Vladimir Sementsov-Ogievskiy wrote:
We should probably validate that the length field is a multiple of
min_block (if a server tells us that all operations must be 512-byte
aligned, then reports an extent that is smaller than 512 bytes, we
have no way to ask for the status of the second half of the sector).
Probably also something that needs to be explicitly stated in the NBD
spec. [1]
related question: what server should reply on zero-length request? I'll add
+ if (!bytes) {
+ *pnum = 0;
+ return 0;
+ }
to nbd_client_co_block_status, to prevent such situation, but looks like
spec lacks the information.
nbd.git commit ee926037 mentions that NBD_CMD_READ, _WRITE, _TRIM, and
_WRITE_ZEROES have unspecified behavior for zero-length transactions; we
should do the same for NBD_CMD_BLOCK_STATUS. But in the meantime,
handling it gracefully with a no-op reply (the way qemu.git commit
ef8c887e handles 0-length structured read) is fine.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org