On 3/29/19 11:54 AM, Vladimir Sementsov-Ogievskiy wrote: > 29.03.2019 19:34, Eric Blake wrote: >> The NBD spec suggests that a server should never advertise a size >> inconsistent with its minimum block alignment, as that tail is >> effectively inaccessible to a compliant client obeying those block >> constraints. Although the block layer likes to round up, here, we'd >> prefer to truncate down to obey the spec, and note that it is the >> server's fault for advertising bogus size. >> >> Does not impact either qemu (which always sends properly aligned >> sizes) or nbdkit (which does not send minimum block requirements yet); >> so this is mostly theoretical, to avoid potential asserts elsewhere in >> the code that assume the size is aligned. >>
>> } >> + if (info->min_block && >> + !QEMU_IS_ALIGNED(info->size, info->min_block)) { >> + trace_nbd_opt_info_go_unaligned_size(info->size, >> + info->min_block); >> + info->size = QEMU_ALIGN_DOWN(info->size, info->min_block); >> + } >> trace_nbd_receive_negotiate_size_flags(info->size, >> info->flags); > > And this again leads to silently skip file tail on qemu-img convert from such > nbd export. > I don't really care, but if not Qemu neither nbdkit are affected, isn't it > better just > nbd_send_opt_abort and return -1 in this case? So we'll never have hidden > troubles with > third-party bad servers, and their developers will have to fix their code > instead (even > not written yet, I suppose). The code below is an example of killing connection to an impossible server: if (!is_power_of_2(info->min_block)) { error_setg(errp, "server minimum block size %" PRIu32 " is not a power of two", info->min_block); nbd_send_opt_abort(ioc); return -1; I'll copy that instead of silently truncating and proceeding on. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature